~cytrogen/fluent-reader-mobile

6208bc47e60cad65df39074f0bdec0cabaaaa4ab — Bruce Liu 5 years ago
initial commit
122 files changed, 6819 insertions(+), 0 deletions(-)

A .gitignore
A .metadata
A .vscode/launch.json
A README.md
A android/.gitignore
A android/app/build.gradle
A android/app/src/debug/AndroidManifest.xml
A android/app/src/main/AndroidManifest.xml
A android/app/src/main/kotlin/com/example/fluent_reader_lite/MainActivity.kt
A android/app/src/main/res/drawable/launch_background.xml
A android/app/src/main/res/mipmap-hdpi/ic_launcher.png
A android/app/src/main/res/mipmap-mdpi/ic_launcher.png
A android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
A android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
A android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
A android/app/src/main/res/values/styles.xml
A android/app/src/profile/AndroidManifest.xml
A android/build.gradle
A android/gradle.properties
A android/gradle/wrapper/gradle-wrapper.properties
A android/settings.gradle
A assets/article/article.css
A assets/article/article.html
A assets/article/article.js
A assets/article/mercury.web.js
A assets/icons/logo-outline-dark.png
A assets/icons/logo-outline.png
A assets/icons/logo.png
A ios/.gitignore
A ios/Flutter/AppFrameworkInfo.plist
A ios/Flutter/Debug.xcconfig
A ios/Flutter/Release.xcconfig
A ios/Podfile
A ios/Podfile.lock
A ios/Runner.xcodeproj/project.pbxproj
A ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
A ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
A ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
A ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
A ios/Runner.xcworkspace/contents.xcworkspacedata
A ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
A ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
A ios/Runner/AppDelegate.swift
A ios/Runner/Assets.xcassets/AppIcon.appiconset/100.png
A ios/Runner/Assets.xcassets/AppIcon.appiconset/1024.png
A ios/Runner/Assets.xcassets/AppIcon.appiconset/114.png
A ios/Runner/Assets.xcassets/AppIcon.appiconset/120.png
A ios/Runner/Assets.xcassets/AppIcon.appiconset/144.png
A ios/Runner/Assets.xcassets/AppIcon.appiconset/152.png
A ios/Runner/Assets.xcassets/AppIcon.appiconset/167.png
A ios/Runner/Assets.xcassets/AppIcon.appiconset/180.png
A ios/Runner/Assets.xcassets/AppIcon.appiconset/20.png
A ios/Runner/Assets.xcassets/AppIcon.appiconset/29.png
A ios/Runner/Assets.xcassets/AppIcon.appiconset/40.png
A ios/Runner/Assets.xcassets/AppIcon.appiconset/50.png
A ios/Runner/Assets.xcassets/AppIcon.appiconset/57.png
A ios/Runner/Assets.xcassets/AppIcon.appiconset/58.png
A ios/Runner/Assets.xcassets/AppIcon.appiconset/60.png
A ios/Runner/Assets.xcassets/AppIcon.appiconset/72.png
A ios/Runner/Assets.xcassets/AppIcon.appiconset/76.png
A ios/Runner/Assets.xcassets/AppIcon.appiconset/80.png
A ios/Runner/Assets.xcassets/AppIcon.appiconset/87.png
A ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
A ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
A ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
A ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
A ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
A ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
A ios/Runner/Base.lproj/LaunchScreen.storyboard
A ios/Runner/Base.lproj/Main.storyboard
A ios/Runner/Info.plist
A ios/Runner/Runner-Bridging-Header.h
A lib/components/article_item.dart
A lib/components/badge.dart
A lib/components/cupertino_toolbar.dart
A lib/components/dismissible_background.dart
A lib/components/favicon.dart
A lib/components/list_tile_group.dart
A lib/components/mark_all_action_sheet.dart
A lib/components/my_list_tile.dart
A lib/components/responsive_action_sheet.dart
A lib/components/subscription_item.dart
A lib/components/sync_control.dart
A lib/components/time_text.dart
A lib/l10n/intl_en.arb
A lib/l10n/intl_zh.arb
A lib/main.dart
A lib/models/feed.dart
A lib/models/feeds_model.dart
A lib/models/global_model.dart
A lib/models/groups_model.dart
A lib/models/item.dart
A lib/models/items_model.dart
A lib/models/service.dart
A lib/models/services/fever.dart
A lib/models/source.dart
A lib/models/sources_model.dart
A lib/models/sync_model.dart
A lib/pages/article_page.dart
A lib/pages/group_list_page.dart
A lib/pages/home_page.dart
A lib/pages/item_list_page.dart
A lib/pages/settings/about_page.dart
A lib/pages/settings/feed_page.dart
A lib/pages/settings/general_page.dart
A lib/pages/settings/reading_page.dart
A lib/pages/settings/services/fever_page.dart
A lib/pages/settings/source_edit_page.dart
A lib/pages/settings/sources_page.dart
A lib/pages/settings/text_editor_page.dart
A lib/pages/settings_page.dart
A lib/pages/setup_page.dart
A lib/pages/subscription_list_page.dart
A lib/pages/tablet_base_page.dart
A lib/utils/colors.dart
A lib/utils/db.dart
A lib/utils/global.dart
A lib/utils/store.dart
A lib/utils/utils.dart
A pubspec.lock
A pubspec.yaml
A test/widget_test.dart
A  => .gitignore +42 -0
@@ 1,42 @@
# Miscellaneous
*.class
*.log
*.pyc
*.swp
.DS_Store
.atom/
.buildlog/
.history
.svn/

# IntelliJ related
*.iml
*.ipr
*.iws
.idea/

# The .vscode folder contains launch configuration and tasks you configure in
# VS Code which you may wish to be included in version control, so this line
# is commented out by default.
#.vscode/

# Flutter/Dart/Pub related
**/doc/api/
**/ios/Flutter/.last_build_id
.dart_tool/
.flutter-plugins
.flutter-plugins-dependencies
.packages
.pub-cache/
.pub/
/build/
lib/generated/

# Web related
lib/generated_plugin_registrant.dart

# Symbolication related
app.*.symbols

# Obfuscation related
app.*.map.json

A  => .metadata +10 -0
@@ 1,10 @@
# This file tracks properties of this Flutter project.
# Used by Flutter tool to assess capabilities and perform upgrades etc.
#
# This file should be version controlled and should not be manually edited.

version:
  revision: 78910062997c3a836feee883712c241a5fd22983
  channel: stable

project_type: app

A  => .vscode/launch.json +14 -0
@@ 1,14 @@
{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Flutter",
            "request": "launch",
            "type": "dart",
            "flutterMode": "debug"
        }
    ]
}
\ No newline at end of file

A  => README.md +16 -0
@@ 1,16 @@
# fluent_reader_lite

A new Flutter project.

## Getting Started

This project is a starting point for a Flutter application.

A few resources to get you started if this is your first Flutter project:

- [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab)
- [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook)

For help getting started with Flutter, view our
[online documentation](https://flutter.dev/docs), which offers tutorials,
samples, guidance on mobile development, and a full API reference.

A  => android/.gitignore +11 -0
@@ 1,11 @@
gradle-wrapper.jar
/.gradle
/captures/
/gradlew
/gradlew.bat
/local.properties
GeneratedPluginRegistrant.java

# Remember to never publicly share your keystore.
# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
key.properties

A  => android/app/build.gradle +63 -0
@@ 1,63 @@
def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
    localPropertiesFile.withReader('UTF-8') { reader ->
        localProperties.load(reader)
    }
}

def flutterRoot = localProperties.getProperty('flutter.sdk')
if (flutterRoot == null) {
    throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
}

def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
    flutterVersionCode = '1'
}

def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
    flutterVersionName = '1.0'
}

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"

android {
    compileSdkVersion 29

    sourceSets {
        main.java.srcDirs += 'src/main/kotlin'
    }

    lintOptions {
        disable 'InvalidPackage'
    }

    defaultConfig {
        // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
        applicationId "me.hyliu.fluent_reader_lite"
        minSdkVersion 16
        targetSdkVersion 29
        versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName
    }

    buildTypes {
        release {
            // TODO: Add your own signing config for the release build.
            // Signing with the debug keys for now, so `flutter run --release` works.
            signingConfig signingConfigs.debug
        }
    }
}

flutter {
    source '../..'
}

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
}

A  => android/app/src/debug/AndroidManifest.xml +7 -0
@@ 1,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="me.hyliu.fluent_reader_lite">
    <!-- Flutter needs it to communicate with the running application
         to allow setting breakpoints, to provide hot reload, etc.
    -->
    <uses-permission android:name="android.permission.INTERNET"/>
</manifest>

A  => android/app/src/main/AndroidManifest.xml +51 -0
@@ 1,51 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="me.hyliu.fluent_reader_lite">
    <!-- io.flutter.app.FlutterApplication is an android.app.Application that
         calls FlutterMain.startInitialization(this); in its onCreate method.
         In most cases you can leave this as-is, but you if you want to provide
         additional functionality it is fine to subclass or reimplement
         FlutterApplication and put your custom class here. -->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <application
        android:name="io.flutter.app.FlutterApplication"
        android:label="fluent_reader_lite"
        android:icon="@mipmap/ic_launcher"
        android:usesCleartextTraffic="true">
        <activity
            android:name=".MainActivity"
            android:launchMode="singleTop"
            android:theme="@style/LaunchTheme"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
            android:hardwareAccelerated="true"
            android:windowSoftInputMode="adjustResize">
            <!-- Specifies an Android theme to apply to this Activity as soon as
                 the Android process has started. This theme is visible to the user
                 while the Flutter UI initializes. After that, this theme continues
                 to determine the Window background behind the Flutter UI. -->
            <meta-data
              android:name="io.flutter.embedding.android.NormalTheme"
              android:resource="@style/NormalTheme"
              />
            <!-- Displays an Android View that continues showing the launch screen
                 Drawable until Flutter paints its first frame, then this splash
                 screen fades out. A splash screen is useful to avoid any visual
                 gap between the end of Android's launch screen and the painting of
                 Flutter's first frame. -->
            <meta-data
              android:name="io.flutter.embedding.android.SplashScreenDrawable"
              android:resource="@drawable/launch_background"
              />
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <!-- Don't delete the meta-data below.
             This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
        <meta-data
            android:name="flutterEmbedding"
            android:value="2" />
    </application>
</manifest>

A  => android/app/src/main/kotlin/com/example/fluent_reader_lite/MainActivity.kt +6 -0
@@ 1,6 @@
package me.hyliu.fluent_reader_lite

import io.flutter.embedding.android.FlutterActivity

class MainActivity: FlutterActivity() {
}

A  => android/app/src/main/res/drawable/launch_background.xml +12 -0
@@ 1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Modify this file to customize your launch splash screen -->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@android:color/white" />

    <!-- You can insert your own image assets here -->
    <!-- <item>
        <bitmap
            android:gravity="center"
            android:src="@mipmap/launch_image" />
    </item> -->
</layer-list>

A  => android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
A  => android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
A  => android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
A  => android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
A  => android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
A  => android/app/src/main/res/values/styles.xml +18 -0
@@ 1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- Theme applied to the Android Window while the process is starting -->
    <style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
        <!-- Show a splash screen on the activity. Automatically removed when
             Flutter draws its first frame -->
        <item name="android:windowBackground">@drawable/launch_background</item>
    </style>
    <!-- Theme applied to the Android Window as soon as the process has started.
         This theme determines the color of the Android Window while your
         Flutter UI initializes, as well as behind your Flutter UI while its
         running.
         
         This Theme is only used starting with V2 of Flutter's Android embedding. -->
    <style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
        <item name="android:windowBackground">@android:color/white</item>
    </style>
</resources>

A  => android/app/src/profile/AndroidManifest.xml +7 -0
@@ 1,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="me.hyliu.fluent_reader_lite">
    <!-- Flutter needs it to communicate with the running application
         to allow setting breakpoints, to provide hot reload, etc.
    -->
    <uses-permission android:name="android.permission.INTERNET"/>
</manifest>

A  => android/build.gradle +31 -0
@@ 1,31 @@
buildscript {
    ext.kotlin_version = '1.3.50'
    repositories {
        google()
        jcenter()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.5.0'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

rootProject.buildDir = '../build'
subprojects {
    project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
    project.evaluationDependsOn(':app')
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

A  => android/gradle.properties +4 -0
@@ 1,4 @@
org.gradle.jvmargs=-Xmx1536M
android.useAndroidX=true
android.enableJetifier=true
android.enableR8=true

A  => android/gradle/wrapper/gradle-wrapper.properties +6 -0
@@ 1,6 @@
#Fri Jun 23 08:50:38 CEST 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip

A  => android/settings.gradle +11 -0
@@ 1,11 @@
include ':app'

def localPropertiesFile = new File(rootProject.projectDir, "local.properties")
def properties = new Properties()

assert localPropertiesFile.exists()
localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) }

def flutterSdkPath = properties.getProperty("flutter.sdk")
assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle"

A  => assets/article/article.css +129 -0
@@ 1,129 @@
html, body {
    font-family: sans-serif;
}
html {
    overflow: hidden scroll;
    margin: 16px 24px 32px;
}
@media (min-width: 440px) {
    html {
        margin: 16px 36px 32px;
    }
}
body {
    margin: 0;
}
:root {
    --gray: #484644;
    --primary: #007aff;
}
@media (prefers-color-scheme: dark) {
    :root {
        color: #f8f8f8;
        --gray: #a19f9d;
        --primary:#0a84ff;
    }

    html {
        background-color: #000;
    };
}
html.dark {
    color: #f8f8f8;
    --gray: #a19f9d;
    --primary:#0a84ff;
    background-color: #000;
}
html.light {
    color: #000;
    --gray: #484644;
    --primary: #007aff;
    background-color: #fff;
}

h1, h2, h3, h4, h5, h6, b, strong {
    font-weight: 600;
}
a, a:hover, a:active {
    color: var(--primary);
    text-decoration: none;
}

@keyframes fadeIn {
    0% {
        opacity: 0;
        transform: translateY(10px);
    }
    100% {
        opacity: 1;
        transform: translateY(0);
    }
}
#main {
    max-width: 700px;
    margin: 0 auto;
    display: none;
}
#main.show {
    display: block;
    animation-name: fadeIn;
    animation-duration: 0.367s;
    animation-timing-function: cubic-bezier(0.1, 0.9, 0.2, 1);
    animation-fill-mode: both;
}

#main > p#source {
    color: var(--gray);
    font-size: .875rem;
    margin-block-end: .5rem;
}
#main > p#title {
    font-size: 1.375rem;
    line-height: 1.75rem;
    font-weight: 600;
    margin: 0;
}
#main > p#date {
    color: var(--gray);
    font-size: .875rem;
    margin-block-start: .5rem;
}

article {
    line-height: 1.6;
}
article * {
    max-width: 100%;
    overflow: hidden;
}
article img {
    height: auto;
}
article figure {
    margin: 16px 0;
    text-align: center;
}
article figure figcaption {
    font-size: .875rem;
    color: var(--gray);
    -webkit-user-modify: read-only;
}
article iframe {
    width: 100%;
}
article code {
    font-family: Monaco, Consolas, monospace;
    font-size: .875rem;
    line-height: 1;
}
article blockquote {
    border-left: 2px solid var(--gray);
    margin: 1em 0;
    padding: 0 16px;
}
article ul, article menu, article dir {
    padding-inline-start: 24px;
}
article li {
    overflow: visible;
}
\ No newline at end of file

A  => assets/article/article.html +16 -0
@@ 1,16 @@
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta http-equiv="Content-Security-Policy"
        content="default-src 'none'; script-src 'self'; img-src http: https: data:; style-src 'self' 'unsafe-inline'; frame-src http: https:; media-src http: https:; connect-src https: http:">
    <title>Article</title>
    <link rel="stylesheet" href="article.css" />
    <script src="mercury.web.js"></script>
</head>
<body>
    <div id="main"></div>
    <script src="article.js"></script>
</body>
</html>
\ No newline at end of file

A  => assets/article/article.js +52 -0
@@ 1,52 @@
function get(name) {
    if (name = (new RegExp('[?&]' + encodeURIComponent(name) + '=([^&]*)')).exec(location.search))
        return decodeURIComponent(name[1])
    return null
}
async function getArticle(url) {
    let article = get("a")
    if (get("m") === "1") {
        return (await Mercury.parse(url, {html: article})).content || ""
    } else {
        return article
    }
}
document.documentElement.style.fontSize = get("s") + "px"
let theme = get("t")
if (theme !== null) document.documentElement.classList.add(theme === "1" ? "light" : "dark")
let url = get("u")
getArticle(url).then(article => {
    let domParser = new DOMParser()
    let dom = domParser.parseFromString(get("h"), "text/html")
    dom.getElementsByTagName("article")[0].innerHTML = article
    let baseUrl = url.split("/").slice(0, 3).join("/")
    for (let s of dom.getElementsByTagName("script")) {
        s.parentNode.removeChild(s)
    }
    for (let e of dom.querySelectorAll("*[src]")) {
        if (e.src && !e.src.startsWith("http")) {
            if (e.src.startsWith("/")) {
                e.src = baseUrl + e.src
            } else if (e.src.startsWith(":")) {
                e.src = "http" + e.src
            } else {
                e.src = baseUrl + "/" + e.src
            }
        }
    }
    for (let e of dom.querySelectorAll("*[href]")) {
        if (e.href && !e.href.startsWith("http")) {
            if (e.href.startsWith("/")) {
                e.href = baseUrl + e.href
            } else if (e.href.startsWith(":")) {
                e.href = "http" + e.href
            } else {
                e.href = baseUrl + "/" + e.href
            }
        }
    }
    let main = document.getElementById("main")
    main.innerHTML = dom.body.innerHTML
    main.classList.add("show")
})


A  => assets/article/mercury.web.js +1 -0
@@ 1,1 @@
var Mercury=function(){"use strict";function $n(){throw new Error("Dynamic requires are not currently supported by rollup-plugin-commonjs")}function e(e,t){return e(t={exports:{}},t.exports),t.exports}var t=e(function(O){!function(e){var u,t=Object.prototype,c=t.hasOwnProperty,n="function"==typeof Symbol?Symbol:{},a=n.iterator||"@@iterator",r=n.asyncIterator||"@@asyncIterator",i=n.toStringTag||"@@toStringTag",o=e.regeneratorRuntime;if(o)O.exports=o;else{(o=e.regeneratorRuntime=O.exports).wrap=y;var f="suspendedStart",h="suspendedYield",d="executing",p="completed",m={},s={};s[a]=function(){return this};var l=Object.getPrototypeOf,g=l&&l(l(C([])));g&&g!==t&&c.call(g,a)&&(s=g);var v=A.prototype=b.prototype=Object.create(s);w.prototype=v.constructor=A,A.constructor=w,A[i]=w.displayName="GeneratorFunction",o.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===w||"GeneratorFunction"===(t.displayName||t.name))},o.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,A):(e.__proto__=A,i in e||(e[i]="GeneratorFunction")),e.prototype=Object.create(v),e},o.awrap=function(e){return{__await:e}},x(k.prototype),k.prototype[r]=function(){return this},o.AsyncIterator=k,o.async=function(e,t,n,r){var a=new k(y(e,t,n,r));return o.isGeneratorFunction(t)?a:a.next().then(function(e){return e.done?e.value:a.next()})},x(v),v[i]="Generator",v[a]=function(){return this},v.toString=function(){return"[object Generator]"},o.keys=function(n){var r=[];for(var e in n)r.push(e);return r.reverse(),function e(){for(;r.length;){var t=r.pop();if(t in n)return e.value=t,e.done=!1,e}return e.done=!0,e}},o.values=C,T.prototype={constructor:T,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=u,this.done=!1,this.delegate=null,this.method="next",this.arg=u,this.tryEntries.forEach(M),!e)for(var t in this)"t"===t.charAt(0)&&c.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=u)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(n){if(this.done)throw n;var r=this;function e(e,t){return i.type="throw",i.arg=n,r.next=e,t&&(r.method="next",r.arg=u),!!t}for(var t=this.tryEntries.length-1;0<=t;--t){var a=this.tryEntries[t],i=a.completion;if("root"===a.tryLoc)return e("end");if(a.tryLoc<=this.prev){var o=c.call(a,"catchLoc"),s=c.call(a,"finallyLoc");if(o&&s){if(this.prev<a.catchLoc)return e(a.catchLoc,!0);if(this.prev<a.finallyLoc)return e(a.finallyLoc)}else if(o){if(this.prev<a.catchLoc)return e(a.catchLoc,!0)}else{if(!s)throw new Error("try statement without catch or finally");if(this.prev<a.finallyLoc)return e(a.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;0<=n;--n){var r=this.tryEntries[n];if(r.tryLoc<=this.prev&&c.call(r,"finallyLoc")&&this.prev<r.finallyLoc){var a=r;break}}a&&("break"===e||"continue"===e)&&a.tryLoc<=t&&t<=a.finallyLoc&&(a=null);var i=a?a.completion:{};return i.type=e,i.arg=t,a?(this.method="next",this.next=a.finallyLoc,m):this.complete(i)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),m},finish:function(e){for(var t=this.tryEntries.length-1;0<=t;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),M(n),m}},catch:function(e){for(var t=this.tryEntries.length-1;0<=t;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var a=r.arg;M(n)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:C(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=u),m}}}function y(e,t,n,r){var i,o,s,u,a=t&&t.prototype instanceof b?t:b,c=Object.create(a.prototype),l=new T(r||[]);return c._invoke=(i=e,o=n,s=l,u=f,function(e,t){if(u===d)throw new Error("Generator is already running");if(u===p){if("throw"===e)throw t;return D()}for(s.method=e,s.arg=t;;){var n=s.delegate;if(n){var r=E(n,s);if(r){if(r===m)continue;return r}}if("next"===s.method)s.sent=s._sent=s.arg;else if("throw"===s.method){if(u===f)throw u=p,s.arg;s.dispatchException(s.arg)}else"return"===s.method&&s.abrupt("return",s.arg);u=d;var a=_(i,o,s);if("normal"===a.type){if(u=s.done?p:h,a.arg===m)continue;return{value:a.arg,done:s.done}}"throw"===a.type&&(u=p,s.method="throw",s.arg=a.arg)}}),c}function _(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}function b(){}function w(){}function A(){}function x(e){["next","throw","return"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)}})}function k(u){var t;this._invoke=function(n,r){function e(){return new Promise(function(e,t){!function t(e,n,r,a){var i=_(u[e],u,n);if("throw"!==i.type){var o=i.arg,s=o.value;return s&&"object"==typeof s&&c.call(s,"__await")?Promise.resolve(s.__await).then(function(e){t("next",e,r,a)},function(e){t("throw",e,r,a)}):Promise.resolve(s).then(function(e){o.value=e,r(o)},function(e){return t("throw",e,r,a)})}a(i.arg)}(n,r,e,t)})}return t=t?t.then(e,e):e()}}function E(e,t){var n=e.iterator[t.method];if(n===u){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=u,E(e,t),"throw"===t.method))return m;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return m}var r=_(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,m;var a=r.arg;return a?a.done?(t[e.resultName]=a.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=u),t.delegate=null,m):a:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,m)}function S(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function M(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function T(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(S,this),this.reset(!0)}function C(t){if(t){var e=t[a];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,r=function e(){for(;++n<t.length;)if(c.call(t,n))return e.value=t[n],e.done=!1,e;return e.value=u,e.done=!0,e};return r.next=r}}return{next:D}}function D(){return{value:u,done:!0}}}(function(){return this||"object"==typeof self&&self}()||Function("return this")())}),n=function(){return this||"object"==typeof self&&self}()||Function("return this")(),r=n.regeneratorRuntime&&0<=Object.getOwnPropertyNames(n).indexOf("regeneratorRuntime"),a=r&&n.regeneratorRuntime;n.regeneratorRuntime=void 0;var i=t;if(r)n.regeneratorRuntime=a;else try{delete n.regeneratorRuntime}catch(e){n.regeneratorRuntime=void 0}var S=i,o={}.toString,s=function(e){return o.call(e).slice(8,-1)},h=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==s(e)?e.split(""):Object(e)},u=function(e){if(null==e)throw TypeError("Can't call method on  "+e);return e},c=function(e){return h(u(e))},d={f:{}.propertyIsEnumerable},A=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},l=function(e){return"object"==typeof e?null!==e:"function"==typeof e},f=function(e,t){if(!l(e))return e;var n,r;if(t&&"function"==typeof(n=e.toString)&&!l(r=n.call(e)))return r;if("function"==typeof(n=e.valueOf)&&!l(r=n.call(e)))return r;if(!t&&"function"==typeof(n=e.toString)&&!l(r=n.call(e)))return r;throw TypeError("Can't convert object to primitive value")},p={}.hasOwnProperty,m=function(e,t){return p.call(e,t)},g=function(e){try{return!!e()}catch(e){return!0}},v=!g(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}),y=e(function(e){var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)}),_=y.document,b=l(_)&&l(_.createElement),w=function(e){return b?_.createElement(e):{}},x=!v&&!g(function(){return 7!=Object.defineProperty(w("div"),"a",{get:function(){return 7}}).a}),k=Object.getOwnPropertyDescriptor,E={f:v?k:function(e,t){if(e=c(e),t=f(t,!0),x)try{return k(e,t)}catch(e){}if(m(e,t))return A(!d.f.call(e,t),e[t])}},M=e(function(e){var t=e.exports={version:"2.6.2"};"number"==typeof __e&&(__e=t)}),T=(M.version,function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}),C=function(r,a,e){if(T(r),void 0===a)return r;switch(e){case 1:return function(e){return r.call(a,e)};case 2:return function(e,t){return r.call(a,e,t)};case 3:return function(e,t,n){return r.call(a,e,t,n)}}return function(){return r.apply(a,arguments)}},D=function(e){if(!l(e))throw TypeError(e+" is not an object!");return e},O=Object.defineProperty,j={f:v?Object.defineProperty:function(e,t,n){if(D(e),t=f(t,!0),D(n),x)try{return O(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},N=v?function(e,t,n){return j.f(e,t,A(1,n))}:function(e,t,n){return e[t]=n,e},z="prototype",P=function(e,t,n){var r,a,i,o=e&P.F,s=e&P.G,u=e&P.S,c=e&P.P,l=e&P.B,f=e&P.W,h=s?M:M[t]||(M[t]={}),d=h[z],p=s?y:u?y[t]:(y[t]||{})[z];for(r in s&&(n=t),n)(a=!o&&p&&void 0!==p[r])&&m(h,r)||(i=a?p[r]:n[r],h[r]=s&&"function"!=typeof p[r]?n[r]:l&&a?C(i,y):f&&p[r]==i?function(r){var e=function(e,t,n){if(this instanceof r){switch(arguments.length){case 0:return new r;case 1:return new r(e);case 2:return new r(e,t)}return new r(e,t,n)}return r.apply(this,arguments)};return e[z]=r[z],e}(i):c&&"function"==typeof i?C(Function.call,i):i,c&&((h.virtual||(h.virtual={}))[r]=i,e&P.R&&d&&!d[r]&&N(d,r,i)))};P.F=1,P.G=2,P.S=4,P.P=8,P.B=16,P.W=32,P.U=64,P.R=128;var L=P,R=function(e,t){var n=(M.Object||{})[e]||Object[e],r={};r[e]=t(n),L(L.S+L.F*g(function(){n(1)}),"Object",r)},Y=E.f;R("getOwnPropertyDescriptor",function(){return function(e,t){return Y(c(e),t)}});var W,q=M.Object,I=function(e,t){return q.getOwnPropertyDescriptor(e,t)},H=N,F=0,B=Math.random(),G=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++F+B).toString(36))},U=e(function(e){var n=G("meta"),t=j.f,r=0,a=Object.isExtensible||function(){return!0},i=!g(function(){return a(Object.preventExtensions({}))}),o=function(e){t(e,n,{value:{i:"O"+ ++r,w:{}}})},s=e.exports={KEY:n,NEED:!1,fastKey:function(e,t){if(!l(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!m(e,n)){if(!a(e))return"F";if(!t)return"E";o(e)}return e[n].i},getWeak:function(e,t){if(!m(e,n)){if(!a(e))return!0;if(!t)return!1;o(e)}return e[n].w},onFreeze:function(e){return i&&s.NEED&&a(e)&&!m(e,n)&&o(e),e}}}),$=(U.KEY,U.NEED,U.fastKey,U.getWeak,U.onFreeze,e(function(e){var t="__core-js_shared__",n=y[t]||(y[t]={});(e.exports=function(e,t){return n[e]||(n[e]=void 0!==t?t:{})})("versions",[]).push({version:M.version,mode:"pure",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})})),V=e(function(e){var t=$("wks"),n=y.Symbol,r="function"==typeof n;(e.exports=function(e){return t[e]||(t[e]=r&&n[e]||(r?n:G)("Symbol."+e))}).store=t}),J=j.f,K=V("toStringTag"),X=function(e,t,n){e&&!m(e=n?e:e.prototype,K)&&J(e,K,{configurable:!0,value:t})},Z={f:V},Q=j.f,ee=function(e){var t=M.Symbol||(M.Symbol={});"_"==e.charAt(0)||e in t||Q(t,e,{value:Z.f(e)})},te=Math.ceil,ne=Math.floor,re=function(e){return isNaN(e=+e)?0:(0<e?ne:te)(e)},ae=Math.min,ie=function(e){return 0<e?ae(re(e),9007199254740991):0},oe=Math.max,se=Math.min,ue=$("keys"),ce=function(e){return ue[e]||(ue[e]=G(e))},le=(W=!1,function(e,t,n){var r,a,i,o=c(e),s=ie(o.length),u=(a=s,(r=re(r=n))<0?oe(r+a,0):se(r,a));if(W&&t!=t){for(;u<s;)if((i=o[u++])!=i)return!0}else for(;u<s;u++)if((W||u in o)&&o[u]===t)return W||u||0;return!W&&-1}),fe=ce("IE_PROTO"),he=function(e,t){var n,r=c(e),a=0,i=[];for(n in r)n!=fe&&m(r,n)&&i.push(n);for(;t.length>a;)m(r,n=t[a++])&&(~le(i,n)||i.push(n));return i},de="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),pe=Object.keys||function(e){return he(e,de)},me={f:Object.getOwnPropertySymbols},ge=Array.isArray||function(e){return"Array"==s(e)},ve=v?Object.defineProperties:function(e,t){D(e);for(var n,r=pe(t),a=r.length,i=0;i<a;)j.f(e,n=r[i++],t[n]);return e},ye=y.document,_e=ye&&ye.documentElement,be=ce("IE_PROTO"),we=function(){},Ae="prototype",xe=function(){var e,t=w("iframe"),n=de.length;for(t.style.display="none",_e.appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("<script>document.F=Object<\/script>"),e.close(),xe=e.F;n--;)delete xe[Ae][de[n]];return xe()},ke=Object.create||function(e,t){var n;return null!==e?(we[Ae]=D(e),n=new we,we[Ae]=null,n[be]=e):n=xe(),void 0===t?n:ve(n,t)},Ee=de.concat("length","prototype"),Se={f:Object.getOwnPropertyNames||function(e){return he(e,Ee)}},Me=Se.f,Te={}.toString,Ce="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],De={f:function(e){return Ce&&"[object Window]"==Te.call(e)?function(e){try{return Me(e)}catch(e){return Ce.slice()}}(e):Me(c(e))}},Oe=U.KEY,je=E.f,Ne=j.f,ze=De.f,Pe=y.Symbol,Le=y.JSON,Re=Le&&Le.stringify,Ye="prototype",We=V("_hidden"),qe=V("toPrimitive"),Ie={}.propertyIsEnumerable,He=$("symbol-registry"),Fe=$("symbols"),Be=$("op-symbols"),Ge=Object[Ye],Ue="function"==typeof Pe,$e=y.QObject,Ve=!$e||!$e[Ye]||!$e[Ye].findChild,Je=v&&g(function(){return 7!=ke(Ne({},"a",{get:function(){return Ne(this,"a",{value:7}).a}})).a})?function(e,t,n){var r=je(Ge,t);r&&delete Ge[t],Ne(e,t,n),r&&e!==Ge&&Ne(Ge,t,r)}:Ne,Ke=function(e){var t=Fe[e]=ke(Pe[Ye]);return t._k=e,t},Xe=Ue&&"symbol"==typeof Pe.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof Pe},Ze=function(e,t,n){return e===Ge&&Ze(Be,t,n),D(e),t=f(t,!0),D(n),m(Fe,t)?(n.enumerable?(m(e,We)&&e[We][t]&&(e[We][t]=!1),n=ke(n,{enumerable:A(0,!1)})):(m(e,We)||Ne(e,We,A(1,{})),e[We][t]=!0),Je(e,t,n)):Ne(e,t,n)},Qe=function(e,t){D(e);for(var n,r=function(e){var t=pe(e),n=me.f;if(n)for(var r,a=n(e),i=d.f,o=0;a.length>o;)i.call(e,r=a[o++])&&t.push(r);return t}(t=c(t)),a=0,i=r.length;a<i;)Ze(e,n=r[a++],t[n]);return e},et=function(e){var t=Ie.call(this,e=f(e,!0));return!(this===Ge&&m(Fe,e)&&!m(Be,e))&&(!(t||!m(this,e)||!m(Fe,e)||m(this,We)&&this[We][e])||t)},tt=function(e,t){if(e=c(e),t=f(t,!0),e!==Ge||!m(Fe,t)||m(Be,t)){var n=je(e,t);return!n||!m(Fe,t)||m(e,We)&&e[We][t]||(n.enumerable=!0),n}},nt=function(e){for(var t,n=ze(c(e)),r=[],a=0;n.length>a;)m(Fe,t=n[a++])||t==We||t==Oe||r.push(t);return r},rt=function(e){for(var t,n=e===Ge,r=ze(n?Be:c(e)),a=[],i=0;r.length>i;)!m(Fe,t=r[i++])||n&&!m(Ge,t)||a.push(Fe[t]);return a};Ue||(H((Pe=function(){if(this instanceof Pe)throw TypeError("Symbol is not a constructor!");var t=G(0<arguments.length?arguments[0]:void 0),n=function(e){this===Ge&&n.call(Be,e),m(this,We)&&m(this[We],t)&&(this[We][t]=!1),Je(this,t,A(1,e))};return v&&Ve&&Je(Ge,t,{configurable:!0,set:n}),Ke(t)})[Ye],"toString",function(){return this._k}),E.f=tt,j.f=Ze,Se.f=De.f=nt,d.f=et,me.f=rt,Z.f=function(e){return Ke(V(e))}),L(L.G+L.W+L.F*!Ue,{Symbol:Pe});for(var at="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),it=0;at.length>it;)V(at[it++]);for(var ot=pe(V.store),st=0;ot.length>st;)ee(ot[st++]);L(L.S+L.F*!Ue,"Symbol",{for:function(e){return m(He,e+="")?He[e]:He[e]=Pe(e)},keyFor:function(e){if(!Xe(e))throw TypeError(e+" is not a symbol!");for(var t in He)if(He[t]===e)return t},useSetter:function(){Ve=!0},useSimple:function(){Ve=!1}}),L(L.S+L.F*!Ue,"Object",{create:function(e,t){return void 0===t?ke(e):Qe(ke(e),t)},defineProperty:Ze,defineProperties:Qe,getOwnPropertyDescriptor:tt,getOwnPropertyNames:nt,getOwnPropertySymbols:rt}),Le&&L(L.S+L.F*(!Ue||g(function(){var e=Pe();return"[null]"!=Re([e])||"{}"!=Re({a:e})||"{}"!=Re(Object(e))})),"JSON",{stringify:function(e){for(var t,n,r=[e],a=1;arguments.length>a;)r.push(arguments[a++]);if(n=t=r[1],(l(t)||void 0!==e)&&!Xe(e))return ge(t)||(t=function(e,t){if("function"==typeof n&&(t=n.call(this,e,t)),!Xe(t))return t}),r[1]=t,Re.apply(Le,r)}}),Pe[Ye][qe]||N(Pe[Ye],qe,Pe[Ye].valueOf),X(Pe,"Symbol"),X(Math,"Math",!0),X(y.JSON,"JSON",!0);var ut=M.Object.getOwnPropertySymbols,ct=function(e){return Object(u(e))};R("keys",function(){return function(e){return pe(ct(e))}});var lt=M.Object.keys;L(L.S+L.F*!v,"Object",{defineProperty:j.f});var ft=M.Object,ht=function(e,t,n){return ft.defineProperty(e,t,n)};var dt=function(e,t,n){return t in e?ht(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e};var pt=function(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{},r=lt(n);"function"==typeof ut&&(r=r.concat(ut(n).filter(function(e){return I(n,e).enumerable}))),r.forEach(function(e){dt(t,e,n[e])})}return t};var mt=function(e,t){if(null==e)return{};var n,r,a={},i=lt(e);for(r=0;r<i.length;r++)n=i[r],0<=t.indexOf(n)||(a[n]=e[n]);return a};var gt=function(e,t){if(null==e)return{};var n,r,a=mt(e,t);if(ut){var i=ut(e);for(r=0;r<i.length;r++)n=i[r],0<=t.indexOf(n)||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a},vt={},yt={};N(yt,V("iterator"),function(){return this});var _t,bt=ce("IE_PROTO"),wt=Object.prototype,At=Object.getPrototypeOf||function(e){return e=ct(e),m(e,bt)?e[bt]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?wt:null},xt=V("iterator"),kt=!([].keys&&"next"in[].keys()),Et="values",St=function(){return this},Mt=function(e,t,n,r,a,i,o){var s,u,c;u=t,c=r,(s=n).prototype=ke(yt,{next:A(1,c)}),X(s,u+" Iterator");var l,f,h,d=function(e){if(!kt&&e in v)return v[e];switch(e){case"keys":case Et:return function(){return new n(this,e)}}return function(){return new n(this,e)}},p=t+" Iterator",m=a==Et,g=!1,v=e.prototype,y=v[xt]||v["@@iterator"]||a&&v[a],_=y||d(a),b=a?m?d("entries"):_:void 0,w="Array"==t&&v.entries||y;if(w&&(h=At(w.call(new e)))!==Object.prototype&&h.next&&X(h,p,!0),m&&y&&y.name!==Et&&(g=!0,_=function(){return y.call(this)}),o&&(kt||g||!v[xt])&&N(v,xt,_),vt[t]=_,vt[p]=St,a)if(l={values:m?_:d(Et),keys:i?_:d("keys"),entries:b},o)for(f in l)f in v||H(v,f,l[f]);else L(L.P+L.F*(kt||g),t,l);return l},Tt=(_t=!0,function(e,t){var n,r,a=String(u(e)),i=re(t),o=a.length;return i<0||o<=i?_t?"":void 0:(n=a.charCodeAt(i))<55296||56319<n||i+1===o||(r=a.charCodeAt(i+1))<56320||57343<r?_t?a.charAt(i):n:_t?a.slice(i,i+2):r-56320+(n-55296<<10)+65536});Mt(String,"String",function(e){this._t=String(e),this._i=0},function(){var e,t=this._t,n=this._i;return n>=t.length?{value:void 0,done:!0}:(e=Tt(t,n),this._i+=e.length,{value:e,done:!1})});var Ct=function(e,t){return{value:t,done:!!e}};Mt(Array,"Array",function(e,t){this._t=c(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,Ct(1)):Ct(0,"keys"==t?n:"values"==t?e[n]:[n,e[n]])},"values");vt.Arguments=vt.Array;for(var Dt=V("toStringTag"),Ot="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".split(","),jt=0;jt<Ot.length;jt++){var Nt=Ot[jt],zt=y[Nt],Pt=zt&&zt.prototype;Pt&&!Pt[Dt]&&N(Pt,Dt,Nt),vt[Nt]=vt.Array}var Lt,Rt,Yt,Wt=V("toStringTag"),qt="Arguments"==s(function(){return arguments}()),It=function(e){var t,n,r;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),Wt))?n:qt?s(t):"Object"==(r=s(t))&&"function"==typeof t.callee?"Arguments":r},Ht=function(e,t,n,r){if(!(e instanceof t)||void 0!==r&&r in e)throw TypeError(n+": incorrect invocation!");return e},Ft=function(t,e,n,r){try{return r?e(D(n)[0],n[1]):e(n)}catch(e){var a=t.return;throw void 0!==a&&D(a.call(t)),e}},Bt=V("iterator"),Gt=Array.prototype,Ut=function(e){return void 0!==e&&(vt.Array===e||Gt[Bt]===e)},$t=V("iterator"),Vt=M.getIteratorMethod=function(e){if(null!=e)return e[$t]||e["@@iterator"]||vt[It(e)]},Jt=e(function(e){var h={},d={},t=e.exports=function(e,t,n,r,a){var i,o,s,u,c=a?function(){return e}:Vt(e),l=C(n,r,t?2:1),f=0;if("function"!=typeof c)throw TypeError(e+" is not iterable!");if(Ut(c)){for(i=ie(e.length);f<i;f++)if((u=t?l(D(o=e[f])[0],o[1]):l(e[f]))===h||u===d)return u}else for(s=c.call(e);!(o=s.next()).done;)if((u=Ft(s,l,o.value,t))===h||u===d)return u};t.BREAK=h,t.RETURN=d}),Kt=V("species"),Xt=function(e,t){var n,r=D(e).constructor;return void 0===r||null==(n=D(r)[Kt])?t:T(n)},Zt=y.process,Qt=y.setImmediate,en=y.clearImmediate,tn=y.MessageChannel,nn=y.Dispatch,rn=0,an={},on="onreadystatechange",sn=function(){var e=+this;if(an.hasOwnProperty(e)){var t=an[e];delete an[e],t()}},un=function(e){sn.call(e.data)};Qt&&en||(Qt=function(e){for(var t=[],n=1;arguments.length>n;)t.push(arguments[n++]);return an[++rn]=function(){!function(e,t,n){var r=void 0===n;switch(t.length){case 0:return r?e():e.call(n);case 1:return r?e(t[0]):e.call(n,t[0]);case 2:return r?e(t[0],t[1]):e.call(n,t[0],t[1]);case 3:return r?e(t[0],t[1],t[2]):e.call(n,t[0],t[1],t[2]);case 4:return r?e(t[0],t[1],t[2],t[3]):e.call(n,t[0],t[1],t[2],t[3])}e.apply(n,t)}("function"==typeof e?e:Function(e),t)},Lt(rn),rn},en=function(e){delete an[e]},"process"==s(Zt)?Lt=function(e){Zt.nextTick(C(sn,e,1))}:nn&&nn.now?Lt=function(e){nn.now(C(sn,e,1))}:tn?(Yt=(Rt=new tn).port2,Rt.port1.onmessage=un,Lt=C(Yt.postMessage,Yt,1)):y.addEventListener&&"function"==typeof postMessage&&!y.importScripts?(Lt=function(e){y.postMessage(e+"","*")},y.addEventListener("message",un,!1)):Lt=on in w("script")?function(e){_e.appendChild(w("script"))[on]=function(){_e.removeChild(this),sn.call(e)}}:function(e){setTimeout(C(sn,e,1),0)});var cn={set:Qt,clear:en},ln=cn.set,fn=y.MutationObserver||y.WebKitMutationObserver,hn=y.process,dn=y.Promise,pn="process"==s(hn);function mn(e){var n,r;this.promise=new e(function(e,t){if(void 0!==n||void 0!==r)throw TypeError("Bad Promise constructor");n=e,r=t}),this.resolve=T(n),this.reject=T(r)}var gn={f:function(e){return new mn(e)}},vn=function(e){try{return{e:!1,v:e()}}catch(e){return{e:!0,v:e}}},yn=y.navigator,_n=yn&&yn.userAgent||"",bn=function(e,t){if(D(e),l(t)&&t.constructor===e)return t;var n=gn.f(e);return(0,n.resolve)(t),n.promise},wn=function(e,t,n){for(var r in t)n&&e[r]?e[r]=t[r]:N(e,r,t[r]);return e},An=V("species"),xn=function(e){var t="function"==typeof M[e]?M[e]:y[e];v&&t&&!t[An]&&j.f(t,An,{configurable:!0,get:function(){return this}})},kn=V("iterator"),En=!1;try{[7][kn]().return=function(){En=!0}}catch(e){}var Sn,Mn,Tn,Cn,Dn=function(e,t){if(!t&&!En)return!1;var n=!1;try{var r=[7],a=r[kn]();a.next=function(){return{done:n=!0}},r[kn]=function(){return a},e(r)}catch(e){}return n},On=cn.set,jn=function(){var n,r,a,e=function(){var e,t;for(pn&&(e=hn.domain)&&e.exit();n;){t=n.fn,n=n.next;try{t()}catch(e){throw n?a():r=void 0,e}}r=void 0,e&&e.enter()};if(pn)a=function(){hn.nextTick(e)};else if(!fn||y.navigator&&y.navigator.standalone)if(dn&&dn.resolve){var t=dn.resolve(void 0);a=function(){t.then(e)}}else a=function(){ln.call(y,e)};else{var i=!0,o=document.createTextNode("");new fn(e).observe(o,{characterData:!0}),a=function(){o.data=i=!i}}return function(e){var t={fn:e,next:void 0};r&&(r.next=t),n||(n=t,a()),r=t}}(),Nn="Promise",zn=y.TypeError,Pn=y.process,Ln=Pn&&Pn.versions,Rn=Ln&&Ln.v8||"",Yn=y[Nn],Wn="process"==It(Pn),qn=function(){},In=Mn=gn.f,Hn=!!function(){try{var e=Yn.resolve(1),t=(e.constructor={})[V("species")]=function(e){e(qn,qn)};return(Wn||"function"==typeof PromiseRejectionEvent)&&e.then(qn)instanceof t&&0!==Rn.indexOf("6.6")&&-1===_n.indexOf("Chrome/66")}catch(e){}}(),Fn=function(e){var t;return!(!l(e)||"function"!=typeof(t=e.then))&&t},Bn=function(l,n){if(!l._n){l._n=!0;var r=l._c;jn(function(){for(var u=l._v,c=1==l._s,e=0,t=function(e){var t,n,r,a=c?e.ok:e.fail,i=e.resolve,o=e.reject,s=e.domain;try{a?(c||(2==l._h&&Vn(l),l._h=1),!0===a?t=u:(s&&s.enter(),t=a(u),s&&(s.exit(),r=!0)),t===e.promise?o(zn("Promise-chain cycle")):(n=Fn(t))?n.call(t,i,o):i(t)):o(u)}catch(e){s&&!r&&s.exit(),o(e)}};r.length>e;)t(r[e++]);l._c=[],l._n=!1,n&&!l._h&&Gn(l)})}},Gn=function(i){On.call(y,function(){var e,t,n,r=i._v,a=Un(i);if(a&&(e=vn(function(){Wn?Pn.emit("unhandledRejection",r,i):(t=y.onunhandledrejection)?t({promise:i,reason:r}):(n=y.console)&&n.error&&n.error("Unhandled promise rejection",r)}),i._h=Wn||Un(i)?2:1),i._a=void 0,a&&e.e)throw e.v})},Un=function(e){return 1!==e._h&&0===(e._a||e._c).length},Vn=function(t){On.call(y,function(){var e;Wn?Pn.emit("rejectionHandled",t):(e=y.onrejectionhandled)&&e({promise:t,reason:t._v})})},Jn=function(e){var t=this;t._d||(t._d=!0,(t=t._w||t)._v=e,t._s=2,t._a||(t._a=t._c.slice()),Bn(t,!0))},Kn=function(e){var n,r=this;if(!r._d){r._d=!0,r=r._w||r;try{if(r===e)throw zn("Promise can't be resolved itself");(n=Fn(e))?jn(function(){var t={_w:r,_d:!1};try{n.call(e,C(Kn,t,1),C(Jn,t,1))}catch(e){Jn.call(t,e)}}):(r._v=e,r._s=1,Bn(r,!1))}catch(e){Jn.call({_w:r,_d:!1},e)}}};Hn||(Yn=function(e){Ht(this,Yn,Nn,"_h"),T(e),Sn.call(this);try{e(C(Kn,this,1),C(Jn,this,1))}catch(e){Jn.call(this,e)}},(Sn=function(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1}).prototype=wn(Yn.prototype,{then:function(e,t){var n=In(Xt(this,Yn));return n.ok="function"!=typeof e||e,n.fail="function"==typeof t&&t,n.domain=Wn?Pn.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&Bn(this,!1),n.promise},catch:function(e){return this.then(void 0,e)}}),Tn=function(){var e=new Sn;this.promise=e,this.resolve=C(Kn,e,1),this.reject=C(Jn,e,1)},gn.f=In=function(e){return e===Yn||e===Cn?new Tn(e):Mn(e)}),L(L.G+L.W+L.F*!Hn,{Promise:Yn}),X(Yn,Nn),xn(Nn),Cn=M[Nn],L(L.S+L.F*!Hn,Nn,{reject:function(e){var t=In(this);return(0,t.reject)(e),t.promise}}),L(L.S+!0*L.F,Nn,{resolve:function(e){return bn(this===Cn?Yn:this,e)}}),L(L.S+L.F*!(Hn&&Dn(function(e){Yn.all(e).catch(qn)})),Nn,{all:function(e){var o=this,t=In(o),s=t.resolve,u=t.reject,n=vn(function(){var r=[],a=0,i=1;Jt(e,!1,function(e){var t=a++,n=!1;r.push(void 0),i++,o.resolve(e).then(function(e){n||(n=!0,r[t]=e,--i||s(r))},u)}),--i||s(r)});return n.e&&u(n.v),t.promise},race:function(e){var t=this,n=In(t),r=n.reject,a=vn(function(){Jt(e,!1,function(e){t.resolve(e).then(n.resolve,r)})});return a.e&&r(a.v),n.promise}}),L(L.P+L.R,"Promise",{finally:function(t){var n=Xt(this,M.Promise||y.Promise),e="function"==typeof t;return this.then(e?function(e){return bn(n,t()).then(function(){return e})}:t,e?function(e){return bn(n,t()).then(function(){throw e})}:t)}}),L(L.S,"Promise",{try:function(e){var t=gn.f(this),n=vn(e);return(n.e?t.reject:t.resolve)(n.v),t.promise}});var Xn=M.Promise;function Zn(e,t,n,r,a,i,o){try{var s=e[i](o),u=s.value}catch(e){return void n(e)}s.done?t(u):Xn.resolve(u).then(r,a)}var Qn=function(s){return function(){var e=this,o=arguments;return new Xn(function(t,n){var r=s.apply(e,o);function a(e){Zn(r,t,n,a,i,"next",e)}function i(e){Zn(r,t,n,a,i,"throw",e)}a(void 0)})}},er="undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},tr=e(function(O,j){!function(e){var t=j&&!j.nodeType&&j,n=O&&!O.nodeType&&O,r="object"==typeof er&&er;r.global!==r&&r.window!==r&&r.self!==r||(e=r);var a,i,v=2147483647,y=36,_=1,b=26,o=38,s=700,w=72,A=128,x="-",u=/^xn--/,c=/[^\x20-\x7E]/,l=/[\x2E\u3002\uFF0E\uFF61]/g,f={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},h=y-_,k=Math.floor,E=String.fromCharCode;function S(e){throw RangeError(f[e])}function d(e,t){for(var n=e.length,r=[];n--;)r[n]=t(e[n]);return r}function p(e,t){var n=e.split("@"),r="";return 1<n.length&&(r=n[0]+"@",e=n[1]),r+d((e=e.replace(l,".")).split("."),t).join(".")}function M(e){for(var t,n,r=[],a=0,i=e.length;a<i;)55296<=(t=e.charCodeAt(a++))&&t<=56319&&a<i?56320==(64512&(n=e.charCodeAt(a++)))?r.push(((1023&t)<<10)+(1023&n)+65536):(r.push(t),a--):r.push(t);return r}function T(e){return d(e,function(e){var t="";return 65535<e&&(t+=E((e-=65536)>>>10&1023|55296),e=56320|1023&e),t+=E(e)}).join("")}function C(e,t){return e+22+75*(e<26)-((0!=t)<<5)}function D(e,t,n){var r=0;for(e=n?k(e/s):e>>1,e+=k(e/t);h*b>>1<e;r+=y)e=k(e/h);return k(r+(h+1)*e/(e+o))}function m(e){var t,n,r,a,i,o,s,u,c,l,f,h=[],d=e.length,p=0,m=A,g=w;for((n=e.lastIndexOf(x))<0&&(n=0),r=0;r<n;++r)128<=e.charCodeAt(r)&&S("not-basic"),h.push(e.charCodeAt(r));for(a=0<n?n+1:0;a<d;){for(i=p,o=1,s=y;d<=a&&S("invalid-input"),f=e.charCodeAt(a++),(y<=(u=f-48<10?f-22:f-65<26?f-65:f-97<26?f-97:y)||u>k((v-p)/o))&&S("overflow"),p+=u*o,!(u<(c=s<=g?_:g+b<=s?b:s-g));s+=y)o>k(v/(l=y-c))&&S("overflow"),o*=l;g=D(p-i,t=h.length+1,0==i),k(p/t)>v-m&&S("overflow"),m+=k(p/t),p%=t,h.splice(p++,0,m)}return T(h)}function g(e){var t,n,r,a,i,o,s,u,c,l,f,h,d,p,m,g=[];for(h=(e=M(e)).length,t=A,i=w,o=n=0;o<h;++o)(f=e[o])<128&&g.push(E(f));for(r=a=g.length,a&&g.push(x);r<h;){for(s=v,o=0;o<h;++o)t<=(f=e[o])&&f<s&&(s=f);for(s-t>k((v-n)/(d=r+1))&&S("overflow"),n+=(s-t)*d,t=s,o=0;o<h;++o)if((f=e[o])<t&&++n>v&&S("overflow"),f==t){for(u=n,c=y;!(u<(l=c<=i?_:i+b<=c?b:c-i));c+=y)m=u-l,p=y-l,g.push(E(C(l+m%p,0))),u=k(m/p);g.push(E(C(u,0))),i=D(n,d,r==a),n=0,++r}++n,++t}return g.join("")}if(a={version:"1.3.2",ucs2:{decode:M,encode:T},decode:m,encode:g,toASCII:function(e){return p(e,function(e){return c.test(e)?"xn--"+g(e):e})},toUnicode:function(e){return p(e,function(e){return u.test(e)?m(e.slice(4).toLowerCase()):e})}},t&&n)if(O.exports==t)n.exports=a;else for(i in a)a.hasOwnProperty(i)&&(t[i]=a[i]);else e.punycode=a}(this)}),nr={isString:function(e){return"string"==typeof e},isObject:function(e){return"object"==typeof e&&null!==e},isNull:function(e){return null===e},isNullOrUndefined:function(e){return null==e}};var rr=function(e,t,n,r){t=t||"&",n=n||"=";var a={};if("string"!=typeof e||0===e.length)return a;var i=/\+/g;e=e.split(t);var o=1e3;r&&"number"==typeof r.maxKeys&&(o=r.maxKeys);var s,u,c=e.length;0<o&&o<c&&(c=o);for(var l=0;l<c;++l){var f,h,d,p,m=e[l].replace(i,"%20"),g=m.indexOf(n);h=0<=g?(f=m.substr(0,g),m.substr(g+1)):(f=m,""),d=decodeURIComponent(f),p=decodeURIComponent(h),s=a,u=d,Object.prototype.hasOwnProperty.call(s,u)?Array.isArray(a[d])?a[d].push(p):a[d]=[a[d],p]:a[d]=p}return a},ar=function(e){switch(typeof e){case"string":return e;case"boolean":return e?"true":"false";case"number":return isFinite(e)?e:"";default:return""}},ir=function(n,r,a,e){return r=r||"&",a=a||"=",null===n&&(n=void 0),"object"==typeof n?Object.keys(n).map(function(e){var t=encodeURIComponent(ar(e))+a;return Array.isArray(n[e])?n[e].map(function(e){return t+encodeURIComponent(ar(e))}).join(r):t+encodeURIComponent(ar(n[e]))}).join(r):e?encodeURIComponent(ar(e))+a+encodeURIComponent(ar(n)):""},or=e(function(e,t){t.decode=t.parse=rr,t.encode=t.stringify=ir}),sr=(or.decode,or.parse,or.encode,or.stringify,Er),ur=function(e,t){return Er(e,!1,!0).resolve(t)},cr=function(e,t){return e?Er(e,!1,!0).resolveObject(t):t},lr=function(e){nr.isString(e)&&(e=Er(e));return e instanceof hr?e.format():hr.prototype.format.call(e)},fr=hr;function hr(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}var dr=/^([a-z0-9.+-]+:)/i,pr=/:[0-9]*$/,mr=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,gr=["{","}","|","\\","^","`"].concat(["<",">",'"',"`"," ","\r","\n","\t"]),vr=["'"].concat(gr),yr=["%","/","?",";","#"].concat(vr),_r=["/","?","#"],br=/^[+a-z0-9A-Z_-]{0,63}$/,wr=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,Ar={javascript:!0,"javascript:":!0},xr={javascript:!0,"javascript:":!0},kr={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0};function Er(e,t,n){if(e&&nr.isObject(e)&&e instanceof hr)return e;var r=new hr;return r.parse(e,t,n),r}hr.prototype.parse=function(e,t,n){if(!nr.isString(e))throw new TypeError("Parameter 'url' must be a string, not "+typeof e);var r=e.indexOf("?"),a=-1!==r&&r<e.indexOf("#")?"?":"#",i=e.split(a);i[0]=i[0].replace(/\\/g,"/");var o=e=i.join(a);if(o=o.trim(),!n&&1===e.split("#").length){var s=mr.exec(o);if(s)return this.path=o,this.href=o,this.pathname=s[1],s[2]?(this.search=s[2],this.query=t?or.parse(this.search.substr(1)):this.search.substr(1)):t&&(this.search="",this.query={}),this}var u=dr.exec(o);if(u){var c=(u=u[0]).toLowerCase();this.protocol=c,o=o.substr(u.length)}if(n||u||o.match(/^\/\/[^@\/]+@[^@\/]+/)){var l="//"===o.substr(0,2);!l||u&&xr[u]||(o=o.substr(2),this.slashes=!0)}if(!xr[u]&&(l||u&&!kr[u])){for(var f,h,d=-1,p=0;p<_r.length;p++){-1!==(m=o.indexOf(_r[p]))&&(-1===d||m<d)&&(d=m)}-1!==(h=-1===d?o.lastIndexOf("@"):o.lastIndexOf("@",d))&&(f=o.slice(0,h),o=o.slice(h+1),this.auth=decodeURIComponent(f)),d=-1;for(p=0;p<yr.length;p++){var m;-1!==(m=o.indexOf(yr[p]))&&(-1===d||m<d)&&(d=m)}-1===d&&(d=o.length),this.host=o.slice(0,d),o=o.slice(d),this.parseHost(),this.hostname=this.hostname||"";var g="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!g)for(var v=this.hostname.split(/\./),y=(p=0,v.length);p<y;p++){var _=v[p];if(_&&!_.match(br)){for(var b="",w=0,A=_.length;w<A;w++)127<_.charCodeAt(w)?b+="x":b+=_[w];if(!b.match(br)){var x=v.slice(0,p),k=v.slice(p+1),E=_.match(wr);E&&(x.push(E[1]),k.unshift(E[2])),k.length&&(o="/"+k.join(".")+o),this.hostname=x.join(".");break}}}255<this.hostname.length?this.hostname="":this.hostname=this.hostname.toLowerCase(),g||(this.hostname=tr.toASCII(this.hostname));var S=this.port?":"+this.port:"",M=this.hostname||"";this.host=M+S,this.href+=this.host,g&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==o[0]&&(o="/"+o))}if(!Ar[c])for(p=0,y=vr.length;p<y;p++){var T=vr[p];if(-1!==o.indexOf(T)){var C=encodeURIComponent(T);C===T&&(C=escape(T)),o=o.split(T).join(C)}}var D=o.indexOf("#");-1!==D&&(this.hash=o.substr(D),o=o.slice(0,D));var O=o.indexOf("?");if(-1!==O?(this.search=o.substr(O),this.query=o.substr(O+1),t&&(this.query=or.parse(this.query)),o=o.slice(0,O)):t&&(this.search="",this.query={}),o&&(this.pathname=o),kr[c]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){S=this.pathname||"";var j=this.search||"";this.path=S+j}return this.href=this.format(),this},hr.prototype.format=function(){var e=this.auth||"";e&&(e=(e=encodeURIComponent(e)).replace(/%3A/i,":"),e+="@");var t=this.protocol||"",n=this.pathname||"",r=this.hash||"",a=!1,i="";this.host?a=e+this.host:this.hostname&&(a=e+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(a+=":"+this.port)),this.query&&nr.isObject(this.query)&&Object.keys(this.query).length&&(i=or.stringify(this.query));var o=this.search||i&&"?"+i||"";return t&&":"!==t.substr(-1)&&(t+=":"),this.slashes||(!t||kr[t])&&!1!==a?(a="//"+(a||""),n&&"/"!==n.charAt(0)&&(n="/"+n)):a||(a=""),r&&"#"!==r.charAt(0)&&(r="#"+r),o&&"?"!==o.charAt(0)&&(o="?"+o),t+a+(n=n.replace(/[?#]/g,function(e){return encodeURIComponent(e)}))+(o=o.replace("#","%23"))+r},hr.prototype.resolve=function(e){return this.resolveObject(Er(e,!1,!0)).format()},hr.prototype.resolveObject=function(e){if(nr.isString(e)){var t=new hr;t.parse(e,!1,!0),e=t}for(var n=new hr,r=Object.keys(this),a=0;a<r.length;a++){var i=r[a];n[i]=this[i]}if(n.hash=e.hash,""===e.href)return n.href=n.format(),n;if(e.slashes&&!e.protocol){for(var o=Object.keys(e),s=0;s<o.length;s++){var u=o[s];"protocol"!==u&&(n[u]=e[u])}return kr[n.protocol]&&n.hostname&&!n.pathname&&(n.path=n.pathname="/"),n.href=n.format(),n}if(e.protocol&&e.protocol!==n.protocol){if(!kr[e.protocol]){for(var c=Object.keys(e),l=0;l<c.length;l++){var f=c[l];n[f]=e[f]}return n.href=n.format(),n}if(n.protocol=e.protocol,e.host||xr[e.protocol])n.pathname=e.pathname;else{for(var h=(e.pathname||"").split("/");h.length&&!(e.host=h.shift()););e.host||(e.host=""),e.hostname||(e.hostname=""),""!==h[0]&&h.unshift(""),h.length<2&&h.unshift(""),n.pathname=h.join("/")}if(n.search=e.search,n.query=e.query,n.host=e.host||"",n.auth=e.auth,n.hostname=e.hostname||e.host,n.port=e.port,n.pathname||n.search){var d=n.pathname||"",p=n.search||"";n.path=d+p}return n.slashes=n.slashes||e.slashes,n.href=n.format(),n}var m=n.pathname&&"/"===n.pathname.charAt(0),g=e.host||e.pathname&&"/"===e.pathname.charAt(0),v=g||m||n.host&&e.pathname,y=v,_=n.pathname&&n.pathname.split("/")||[],b=(h=e.pathname&&e.pathname.split("/")||[],n.protocol&&!kr[n.protocol]);if(b&&(n.hostname="",n.port=null,n.host&&(""===_[0]?_[0]=n.host:_.unshift(n.host)),n.host="",e.protocol&&(e.hostname=null,e.port=null,e.host&&(""===h[0]?h[0]=e.host:h.unshift(e.host)),e.host=null),v=v&&(""===h[0]||""===_[0])),g)n.host=e.host||""===e.host?e.host:n.host,n.hostname=e.hostname||""===e.hostname?e.hostname:n.hostname,n.search=e.search,n.query=e.query,_=h;else if(h.length)_||(_=[]),_.pop(),_=_.concat(h),n.search=e.search,n.query=e.query;else if(!nr.isNullOrUndefined(e.search)){if(b)n.hostname=n.host=_.shift(),(E=!!(n.host&&0<n.host.indexOf("@"))&&n.host.split("@"))&&(n.auth=E.shift(),n.host=n.hostname=E.shift());return n.search=e.search,n.query=e.query,nr.isNull(n.pathname)&&nr.isNull(n.search)||(n.path=(n.pathname?n.pathname:"")+(n.search?n.search:"")),n.href=n.format(),n}if(!_.length)return n.pathname=null,n.search?n.path="/"+n.search:n.path=null,n.href=n.format(),n;for(var w=_.slice(-1)[0],A=(n.host||e.host||1<_.length)&&("."===w||".."===w)||""===w,x=0,k=_.length;0<=k;k--)"."===(w=_[k])?_.splice(k,1):".."===w?(_.splice(k,1),x++):x&&(_.splice(k,1),x--);if(!v&&!y)for(;x--;x)_.unshift("..");!v||""===_[0]||_[0]&&"/"===_[0].charAt(0)||_.unshift(""),A&&"/"!==_.join("/").substr(-1)&&_.push("");var E,S=""===_[0]||_[0]&&"/"===_[0].charAt(0);b&&(n.hostname=n.host=S?"":_.length?_.shift():"",(E=!!(n.host&&0<n.host.indexOf("@"))&&n.host.split("@"))&&(n.auth=E.shift(),n.host=n.hostname=E.shift()));return(v=v||n.host&&_.length)&&!S&&_.unshift(""),_.length?n.pathname=_.join("/"):(n.pathname=null,n.path=null),nr.isNull(n.pathname)&&nr.isNull(n.search)||(n.path=(n.pathname?n.pathname:"")+(n.search?n.search:"")),n.auth=e.auth||n.auth,n.slashes=n.slashes||e.slashes,n.href=n.format(),n},hr.prototype.parseHost=function(){var e=this.host,t=pr.exec(e);t&&(":"!==(t=t[0])&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)};var Sr,Mr={parse:sr,resolve:ur,resolveObject:cr,format:lr,Url:fr},Tr=e(function(e){var t,n;t="undefined"!=typeof window?window:this,n=function(x,e){var t=[],k=x.document,r=Object.getPrototypeOf,s=t.slice,m=t.concat,u=t.push,a=t.indexOf,n={},i=n.toString,g=n.hasOwnProperty,o=g.toString,c=o.call(Object),v={},y=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},_=function(e){return null!=e&&e===e.window},l={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,a,i=(n=n||k).createElement("script");if(i.text=e,t)for(r in l)(a=t[r]||t.getAttribute&&t.getAttribute(r))&&i.setAttribute(r,a);n.head.appendChild(i).parentNode.removeChild(i)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e}var E=function(e,t){return new E.fn.init(e,t)},f=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function h(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!y(e)&&!_(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}E.fn=E.prototype={jquery:"3.4.1",constructor:E,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=E.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return E.each(this,e)},map:function(n){return this.pushStack(E.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},E.extend=E.fn.extend=function(){var e,t,n,r,a,i,o=arguments[0]||{},s=1,u=arguments.length,c=!1;for("boolean"==typeof o&&(c=o,o=arguments[s]||{},s++),"object"==typeof o||y(o)||(o={}),s===u&&(o=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&o!==r&&(c&&r&&(E.isPlainObject(r)||(a=Array.isArray(r)))?(n=o[t],i=a&&!Array.isArray(n)?[]:a||E.isPlainObject(n)?n:{},a=!1,o[t]=E.extend(c,i,r)):void 0!==r&&(o[t]=r));return o},E.extend({expando:"jQuery"+("3.4.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]"!==i.call(e)||(t=r(e))&&("function"!=typeof(n=g.call(t,"constructor")&&t.constructor)||o.call(n)!==c))},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t){b(e,{nonce:t&&t.nonce})},each:function(e,t){var n,r=0;if(h(e))for(n=e.length;r<n&&!1!==t.call(e[r],r,e[r]);r++);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(f,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(h(Object(e))?E.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:a.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,a=e.length;r<n;r++)e[a++]=t[r];return e.length=a,e},grep:function(e,t,n){for(var r=[],a=0,i=e.length,o=!n;a<i;a++)!t(e[a],a)!==o&&r.push(e[a]);return r},map:function(e,t,n){var r,a,i=0,o=[];if(h(e))for(r=e.length;i<r;i++)null!=(a=t(e[i],i,n))&&o.push(a);else for(i in e)null!=(a=t(e[i],i,n))&&o.push(a);return m.apply([],o)},guid:1,support:v}),"function"==typeof Symbol&&(E.fn[Symbol.iterator]=t[Symbol.iterator]),E.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var d=function(n){var e,d,b,i,a,p,f,m,w,u,c,A,x,o,k,g,s,l,v,E="sizzle"+1*new Date,y=n.document,S=0,r=0,h=ue(),_=ue(),M=ue(),T=ue(),C=function(e,t){return e===t&&(c=!0),0},D={}.hasOwnProperty,t=[],O=t.pop,j=t.push,N=t.push,z=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",R="[\\x20\\t\\r\\n\\f]",Y="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",W="\\["+R+"*("+Y+")(?:"+R+"*([*^$|!~]?=)"+R+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+Y+"))|)"+R+"*\\]",q=":("+Y+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",I=new RegExp(R+"+","g"),H=new RegExp("^"+R+"+|((?:^|[^\\\\])(?:\\\\.)*)"+R+"+$","g"),F=new RegExp("^"+R+"*,"+R+"*"),B=new RegExp("^"+R+"*([>+~]|"+R+")"+R+"*"),G=new RegExp(R+"|>"),U=new RegExp(q),$=new RegExp("^"+Y+"$"),V={ID:new RegExp("^#("+Y+")"),CLASS:new RegExp("^\\.("+Y+")"),TAG:new RegExp("^("+Y+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+R+"*(even|odd|(([+-]|)(\\d*)n|)"+R+"*(?:([+-]|)"+R+"*(\\d+)|))"+R+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+R+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+R+"*((?:-\\d)?\\d*)"+R+"*\\)|)(?=[^-]|$)","i")},J=/HTML$/i,K=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,Q=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+R+"?|("+R+")|.)","ig"),ne=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)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ae=function(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},ie=function(){A()},oe=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{N.apply(t=z.call(y.childNodes),y.childNodes),t[y.childNodes.length].nodeType}catch(e){N={apply:t.length?function(e,t){j.apply(e,z.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}function se(e,t,n,r){var a,i,o,s,u,c,l,f=t&&t.ownerDocument,h=t?t.nodeType:9;if(n=n||[],"string"!=typeof e||!e||1!==h&&9!==h&&11!==h)return n;if(!r&&((t?t.ownerDocument||t:y)!==x&&A(t),t=t||x,k)){if(11!==h&&(u=Q.exec(e)))if(a=u[1]){if(9===h){if(!(o=t.getElementById(a)))return n;if(o.id===a)return n.push(o),n}else if(f&&(o=f.getElementById(a))&&v(t,o)&&o.id===a)return n.push(o),n}else{if(u[2])return N.apply(n,t.getElementsByTagName(e)),n;if((a=u[3])&&d.getElementsByClassName&&t.getElementsByClassName)return N.apply(n,t.getElementsByClassName(a)),n}if(d.qsa&&!T[e+" "]&&(!g||!g.test(e))&&(1!==h||"object"!==t.nodeName.toLowerCase())){if(l=e,f=t,1===h&&G.test(e)){for((s=t.getAttribute("id"))?s=s.replace(re,ae):t.setAttribute("id",s=E),i=(c=p(e)).length;i--;)c[i]="#"+s+" "+_e(c[i]);l=c.join(","),f=ee.test(e)&&ve(t.parentNode)||t}try{return N.apply(n,f.querySelectorAll(l)),n}catch(t){T(e,!0)}finally{s===E&&t.removeAttribute("id")}}}return m(e.replace(H,"$1"),t,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function ce(e){return e[E]=!0,e}function le(e){var t=x.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){for(var n=e.split("|"),r=n.length;r--;)b.attrHandle[n[r]]=t}function he(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function pe(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function me(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&oe(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ge(o){return ce(function(i){return i=+i,ce(function(e,t){for(var n,r=o([],e.length,i),a=r.length;a--;)e[n=r[a]]&&(e[n]=!(t[n]=e[n]))})})}function ve(e){return e&&void 0!==e.getElementsByTagName&&e}for(e in d=se.support={},a=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!J.test(t||n&&n.nodeName||"HTML")},A=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:y;return r!==x&&9===r.nodeType&&r.documentElement&&(o=(x=r).documentElement,k=!a(x),y!==x&&(n=x.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",ie,!1):n.attachEvent&&n.attachEvent("onunload",ie)),d.attributes=le(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=le(function(e){return e.appendChild(x.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=Z.test(x.getElementsByClassName),d.getById=le(function(e){return o.appendChild(e).id=E,!x.getElementsByName||!x.getElementsByName(E).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if(void 0!==t.getElementById&&k){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t=void 0!==e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if(void 0!==t.getElementById&&k){var n,r,a,i=t.getElementById(e);if(i){if((n=i.getAttributeNode("id"))&&n.value===e)return[i];for(a=t.getElementsByName(e),r=0;i=a[r++];)if((n=i.getAttributeNode("id"))&&n.value===e)return[i]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],a=0,i=t.getElementsByTagName(e);if("*"!==e)return i;for(;n=i[a++];)1===n.nodeType&&r.push(n);return r},b.find.CLASS=d.getElementsByClassName&&function(e,t){if(void 0!==t.getElementsByClassName&&k)return t.getElementsByClassName(e)},s=[],g=[],(d.qsa=Z.test(x.querySelectorAll))&&(le(function(e){o.appendChild(e).innerHTML="<a id='"+E+"'></a><select id='"+E+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&g.push("[*^$]="+R+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||g.push("\\["+R+"*(?:value|"+L+")"),e.querySelectorAll("[id~="+E+"-]").length||g.push("~="),e.querySelectorAll(":checked").length||g.push(":checked"),e.querySelectorAll("a#"+E+"+*").length||g.push(".#.+[+~]")}),le(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=x.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&g.push("name"+R+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&g.push(":enabled",":disabled"),o.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")})),(d.matchesSelector=Z.test(l=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&le(function(e){d.disconnectedMatch=l.call(e,"*"),l.call(e,"[s!='']:x"),s.push("!=",q)}),g=g.length&&new RegExp(g.join("|")),s=s.length&&new RegExp(s.join("|")),t=Z.test(o.compareDocumentPosition),v=t||Z.test(o.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)for(;t=t.parentNode;)if(t===e)return!0;return!1},C=t?function(e,t){if(e===t)return c=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===x||e.ownerDocument===y&&v(y,e)?-1:t===x||t.ownerDocument===y&&v(y,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return c=!0,0;var n,r=0,a=e.parentNode,i=t.parentNode,o=[e],s=[t];if(!a||!i)return e===x?-1:t===x?1:a?-1:i?1:u?P(u,e)-P(u,t):0;if(a===i)return he(e,t);for(n=e;n=n.parentNode;)o.unshift(n);for(n=t;n=n.parentNode;)s.unshift(n);for(;o[r]===s[r];)r++;return r?he(o[r],s[r]):o[r]===y?-1:s[r]===y?1:0}),x},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==x&&A(e),d.matchesSelector&&k&&!T[t+" "]&&(!s||!s.test(t))&&(!g||!g.test(t)))try{var n=l.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){T(t,!0)}return 0<se(t,x,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!==x&&A(e),v(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!==x&&A(e);var n=b.attrHandle[t.toLowerCase()],r=n&&D.call(b.attrHandle,t.toLowerCase())?n(e,t,!k):void 0;return void 0!==r?r:d.attributes||!k?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ae)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,a=0;if(c=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(C),c){for(;t=e[a++];)t===e[a]&&(r=n.push(a));for(;r--;)e.splice(n[r],1)}return u=null,e},i=se.getText=function(e){var t,n="",r=0,a=e.nodeType;if(a){if(1===a||9===a||11===a){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===a||4===a)return e.nodeValue}else for(;t=e[r++];)n+=i(t);return n},(b=se.selectors={cacheLength:50,createPseudo:ce,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(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&U.test(n)&&(t=p(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=h[e+" "];return t||(t=new RegExp("(^|"+R+")"+e+"("+R+"|$)"))&&h(e,function(e){return t.test("string"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,a){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===a:"!="===r?t!==a:"^="===r?a&&0===t.indexOf(a):"*="===r?a&&-1<t.indexOf(a):"$="===r?a&&t.slice(-a.length)===a:"~="===r?-1<(" "+t.replace(I," ")+" ").indexOf(a):"|="===r&&(t===a||t.slice(0,a.length+1)===a+"-"))}},CHILD:function(p,e,t,m,g){var v="nth"!==p.slice(0,3),y="last"!==p.slice(-4),_="of-type"===e;return 1===m&&0===g?function(e){return!!e.parentNode}:function(e,t,n){var r,a,i,o,s,u,c=v!==y?"nextSibling":"previousSibling",l=e.parentNode,f=_&&e.nodeName.toLowerCase(),h=!n&&!_,d=!1;if(l){if(v){for(;c;){for(o=e;o=o[c];)if(_?o.nodeName.toLowerCase()===f:1===o.nodeType)return!1;u=c="only"===p&&!u&&"nextSibling"}return!0}if(u=[y?l.firstChild:l.lastChild],y&&h){for(d=(s=(r=(a=(i=(o=l)[E]||(o[E]={}))[o.uniqueID]||(i[o.uniqueID]={}))[p]||[])[0]===S&&r[1])&&r[2],o=s&&l.childNodes[s];o=++s&&o&&o[c]||(d=s=0)||u.pop();)if(1===o.nodeType&&++d&&o===e){a[p]=[S,s,d];break}}else if(h&&(d=s=(r=(a=(i=(o=e)[E]||(o[E]={}))[o.uniqueID]||(i[o.uniqueID]={}))[p]||[])[0]===S&&r[1]),!1===d)for(;(o=++s&&o&&o[c]||(d=s=0)||u.pop())&&((_?o.nodeName.toLowerCase()!==f:1!==o.nodeType)||!++d||(h&&((a=(i=o[E]||(o[E]={}))[o.uniqueID]||(i[o.uniqueID]={}))[p]=[S,d]),o!==e)););return(d-=g)===m||d%m==0&&0<=d/m}}},PSEUDO:function(e,i){var t,o=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return o[E]?o(i):1<o.length?(t=[e,e,"",i],b.setFilters.hasOwnProperty(e.toLowerCase())?ce(function(e,t){for(var n,r=o(e,i),a=r.length;a--;)e[n=P(e,r[a])]=!(t[n]=r[a])}):function(e){return o(e,0,t)}):o}},pseudos:{not:ce(function(e){var r=[],a=[],s=f(e.replace(H,"$1"));return s[E]?ce(function(e,t,n,r){for(var a,i=s(e,null,r,[]),o=e.length;o--;)(a=i[o])&&(e[o]=!(t[o]=a))}):function(e,t,n){return r[0]=e,s(r,null,n,a),r[0]=null,!a.pop()}}),has:ce(function(t){return function(e){return 0<se(t,e).length}}),contains:ce(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||i(e)).indexOf(t)}}),lang:ce(function(n){return $.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=k?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===o},focus:function(e){return e===x.activeElement&&(!x.hasFocus||x.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:me(!1),disabled:me(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return X.test(e.nodeName)},input:function(e){return K.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:ge(function(){return[0]}),last:ge(function(e,t){return[t-1]}),eq:ge(function(e,t,n){return[n<0?n+t:n]}),even:ge(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ge(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ge(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ge(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=pe(e);function ye(){}function _e(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,c=e.next,l=c||u,f=t&&"parentNode"===l,h=r++;return e.first?function(e,t,n){for(;e=e[u];)if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,a,i,o=[S,h];if(n){for(;e=e[u];)if((1===e.nodeType||f)&&s(e,t,n))return!0}else for(;e=e[u];)if(1===e.nodeType||f)if(a=(i=e[E]||(e[E]={}))[e.uniqueID]||(i[e.uniqueID]={}),c&&c===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=a[l])&&r[0]===S&&r[1]===h)return o[2]=r[2];if((a[l]=o)[2]=s(e,t,n))return!0}return!1}}function we(a){return 1<a.length?function(e,t,n){for(var r=a.length;r--;)if(!a[r](e,t,n))return!1;return!0}:a[0]}function Ae(e,t,n,r,a){for(var i,o=[],s=0,u=e.length,c=null!=t;s<u;s++)(i=e[s])&&(n&&!n(i,r,a)||(o.push(i),c&&t.push(s)));return o}function xe(d,p,m,g,v,e){return g&&!g[E]&&(g=xe(g)),v&&!v[E]&&(v=xe(v,e)),ce(function(e,t,n,r){var a,i,o,s=[],u=[],c=t.length,l=e||function(e,t,n){for(var r=0,a=t.length;r<a;r++)se(e,t[r],n);return n}(p||"*",n.nodeType?[n]:n,[]),f=!d||!e&&p?l:Ae(l,s,d,n,r),h=m?v||(e?d:c||g)?[]:t:f;if(m&&m(f,h,n,r),g)for(a=Ae(h,u),g(a,[],n,r),i=a.length;i--;)(o=a[i])&&(h[u[i]]=!(f[u[i]]=o));if(e){if(v||d){if(v){for(a=[],i=h.length;i--;)(o=h[i])&&a.push(f[i]=o);v(null,h=[],a,r)}for(i=h.length;i--;)(o=h[i])&&-1<(a=v?P(e,o):s[i])&&(e[a]=!(t[a]=o))}}else h=Ae(h===t?h.splice(c,h.length):h),v?v(null,t,h,r):N.apply(t,h)})}function ke(e){for(var a,t,n,r=e.length,i=b.relative[e[0].type],o=i||b.relative[" "],s=i?1:0,u=be(function(e){return e===a},o,!0),c=be(function(e){return-1<P(a,e)},o,!0),l=[function(e,t,n){var r=!i&&(n||t!==w)||((a=t).nodeType?u(e,t,n):c(e,t,n));return a=null,r}];s<r;s++)if(t=b.relative[e[s].type])l=[be(we(l),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[E]){for(n=++s;n<r&&!b.relative[e[n].type];n++);return xe(1<s&&we(l),1<s&&_e(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(H,"$1"),t,s<n&&ke(e.slice(s,n)),n<r&&ke(e=e.slice(n)),n<r&&_e(e))}l.push(t)}return we(l)}return ye.prototype=b.filters=b.pseudos,b.setFilters=new ye,p=se.tokenize=function(e,t){var n,r,a,i,o,s,u,c=_[e+" "];if(c)return t?0:c.slice(0);for(o=e,s=[],u=b.preFilter;o;){for(i in n&&!(r=F.exec(o))||(r&&(o=o.slice(r[0].length)||o),s.push(a=[])),n=!1,(r=B.exec(o))&&(n=r.shift(),a.push({value:n,type:r[0].replace(H," ")}),o=o.slice(n.length)),b.filter)!(r=V[i].exec(o))||u[i]&&!(r=u[i](r))||(n=r.shift(),a.push({value:n,type:i,matches:r}),o=o.slice(n.length));if(!n)break}return t?o.length:o?se.error(e):_(e,s).slice(0)},f=se.compile=function(e,t){var n,g,v,y,_,r,a=[],i=[],o=M[e+" "];if(!o){for(t||(t=p(e)),n=t.length;n--;)(o=ke(t[n]))[E]?a.push(o):i.push(o);(o=M(e,(g=i,y=0<(v=a).length,_=0<g.length,r=function(e,t,n,r,a){var i,o,s,u=0,c="0",l=e&&[],f=[],h=w,d=e||_&&b.find.TAG("*",a),p=S+=null==h?1:Math.random()||.1,m=d.length;for(a&&(w=t===x||t||a);c!==m&&null!=(i=d[c]);c++){if(_&&i){for(o=0,t||i.ownerDocument===x||(A(i),n=!k);s=g[o++];)if(s(i,t||x,n)){r.push(i);break}a&&(S=p)}y&&((i=!s&&i)&&u--,e&&l.push(i))}if(u+=c,y&&c!==u){for(o=0;s=v[o++];)s(l,f,t,n);if(e){if(0<u)for(;c--;)l[c]||f[c]||(f[c]=O.call(r));f=Ae(f)}N.apply(r,f),a&&!e&&0<f.length&&1<u+v.length&&se.uniqueSort(r)}return a&&(S=p,w=h),l},y?ce(r):r))).selector=e}return o},m=se.select=function(e,t,n,r){var a,i,o,s,u,c="function"==typeof e&&e,l=!r&&p(e=c.selector||e);if(n=n||[],1===l.length){if(2<(i=l[0]=l[0].slice(0)).length&&"ID"===(o=i[0]).type&&9===t.nodeType&&k&&b.relative[i[1].type]){if(!(t=(b.find.ID(o.matches[0].replace(te,ne),t)||[])[0]))return n;c&&(t=t.parentNode),e=e.slice(i.shift().value.length)}for(a=V.needsContext.test(e)?0:i.length;a--&&(o=i[a],!b.relative[s=o.type]);)if((u=b.find[s])&&(r=u(o.matches[0].replace(te,ne),ee.test(i[0].type)&&ve(t.parentNode)||t))){if(i.splice(a,1),!(e=r.length&&_e(i)))return N.apply(n,r),n;break}}return(c||f(e,l))(r,t,!k,n,!t||ee.test(e)&&ve(t.parentNode)||t),n},d.sortStable=E.split("").sort(C).join("")===E,d.detectDuplicates=!!c,A(),d.sortDetached=le(function(e){return 1&e.compareDocumentPosition(x.createElement("fieldset"))}),le(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&le(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),le(function(e){return null==e.getAttribute("disabled")})||fe(L,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(x);E.find=d,E.expr=d.selectors,E.expr[":"]=E.expr.pseudos,E.uniqueSort=E.unique=d.uniqueSort,E.text=d.getText,E.isXMLDoc=d.isXML,E.contains=d.contains,E.escapeSelector=d.escape;var p=function(e,t,n){for(var r=[],a=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(a&&E(e).is(n))break;r.push(e)}return r},A=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},S=E.expr.match.needsContext;function M(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var T=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function C(e,n,r){return y(n)?E.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?E.grep(e,function(e){return e===n!==r}):"string"!=typeof n?E.grep(e,function(e){return-1<a.call(n,e)!==r}):E.filter(n,e,r)}E.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?E.find.matchesSelector(r,e)?[r]:[]:E.find.matches(e,E.grep(t,function(e){return 1===e.nodeType}))},E.fn.extend({find:function(e){var t,n,r=this.length,a=this;if("string"!=typeof e)return this.pushStack(E(e).filter(function(){for(t=0;t<r;t++)if(E.contains(a[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)E.find(e,a[t],n);return 1<r?E.uniqueSort(n):n},filter:function(e){return this.pushStack(C(this,e||[],!1))},not:function(e){return this.pushStack(C(this,e||[],!0))},is:function(e){return!!C(this,"string"==typeof e&&S.test(e)?E(e):e||[],!1).length}});var D,O=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(E.fn.init=function(e,t,n){var r,a;if(!e)return this;if(n=n||D,"string"!=typeof e)return e.nodeType?(this[0]=e,this.length=1,this):y(e)?void 0!==n.ready?n.ready(e):e(E):E.makeArray(e,this);if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:O.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof E?t[0]:t,E.merge(this,E.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:k,!0)),T.test(r[1])&&E.isPlainObject(t))for(r in t)y(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(a=k.getElementById(r[2]))&&(this[0]=a,this.length=1),this}).prototype=E.fn,D=E(k);var j=/^(?:parents|prev(?:Until|All))/,N={children:!0,contents:!0,next:!0,prev:!0};function z(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}E.fn.extend({has:function(e){var t=E(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(E.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,a=this.length,i=[],o="string"!=typeof e&&E(e);if(!S.test(e))for(;r<a;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(o?-1<o.index(n):1===n.nodeType&&E.find.matchesSelector(n,e))){i.push(n);break}return this.pushStack(1<i.length?E.uniqueSort(i):i)},index:function(e){return e?"string"==typeof e?a.call(E(e),this[0]):a.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(E.uniqueSort(E.merge(this.get(),E(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),E.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return p(e,"parentNode")},parentsUntil:function(e,t,n){return p(e,"parentNode",n)},next:function(e){return z(e,"nextSibling")},prev:function(e){return z(e,"previousSibling")},nextAll:function(e){return p(e,"nextSibling")},prevAll:function(e){return p(e,"previousSibling")},nextUntil:function(e,t,n){return p(e,"nextSibling",n)},prevUntil:function(e,t,n){return p(e,"previousSibling",n)},siblings:function(e){return A((e.parentNode||{}).firstChild,e)},children:function(e){return A(e.firstChild)},contents:function(e){return void 0!==e.contentDocument?e.contentDocument:(M(e,"template")&&(e=e.content||e),E.merge([],e.childNodes))}},function(r,a){E.fn[r]=function(e,t){var n=E.map(this,a,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=E.filter(t,n)),1<this.length&&(N[r]||E.uniqueSort(n),j.test(r)&&n.reverse()),this.pushStack(n)}});var P=/[^\x20\t\r\n\f]+/g;function L(e){return e}function R(e){throw e}function Y(e,t,n,r){var a;try{e&&y(a=e.promise)?a.call(e).done(t).fail(n):e&&y(a=e.then)?a.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}E.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},E.each(e.match(P)||[],function(e,t){n[t]=!0}),n):E.extend({},r);var a,t,i,o,s=[],u=[],c=-1,l=function(){for(o=o||r.once,i=a=!0;u.length;c=-1)for(t=u.shift();++c<s.length;)!1===s[c].apply(t[0],t[1])&&r.stopOnFalse&&(c=s.length,t=!1);r.memory||(t=!1),a=!1,o&&(s=t?[]:"")},f={add:function(){return s&&(t&&!a&&(c=s.length-1,u.push(t)),function n(e){E.each(e,function(e,t){y(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!a&&l()),this},remove:function(){return E.each(arguments,function(e,t){for(var n;-1<(n=E.inArray(t,s,n));)s.splice(n,1),n<=c&&c--}),this},has:function(e){return e?-1<E.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return o=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return o=u=[],t||a||(s=t=""),this},locked:function(){return!!o},fireWith:function(e,t){return o||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),a||l()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!i}};return f},E.extend({Deferred:function(e){var i=[["notify","progress",E.Callbacks("memory"),E.Callbacks("memory"),2],["resolve","done",E.Callbacks("once memory"),E.Callbacks("once memory"),0,"resolved"],["reject","fail",E.Callbacks("once memory"),E.Callbacks("once memory"),1,"rejected"]],a="pending",o={state:function(){return a},always:function(){return s.done(arguments).fail(arguments),this},catch:function(e){return o.then(null,e)},pipe:function(){var a=arguments;return E.Deferred(function(r){E.each(i,function(e,t){var n=y(a[t[4]])&&a[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&y(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),a=null}).promise()},then:function(t,n,r){var u=0;function c(a,i,o,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(a<u)){if((e=o.apply(n,r))===i.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,y(t)?s?t.call(e,c(u,i,L,s),c(u,i,R,s)):(u++,t.call(e,c(u,i,L,s),c(u,i,R,s),c(u,i,L,i.notifyWith))):(o!==L&&(n=void 0,r=[e]),(s||i.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){E.Deferred.exceptionHook&&E.Deferred.exceptionHook(e,t.stackTrace),u<=a+1&&(o!==R&&(n=void 0,r=[e]),i.rejectWith(n,r))}};a?t():(E.Deferred.getStackHook&&(t.stackTrace=E.Deferred.getStackHook()),x.setTimeout(t))}}return E.Deferred(function(e){i[0][3].add(c(0,e,y(r)?r:L,e.notifyWith)),i[1][3].add(c(0,e,y(t)?t:L)),i[2][3].add(c(0,e,y(n)?n:R))}).promise()},promise:function(e){return null!=e?E.extend(e,o):o}},s={};return E.each(i,function(e,t){var n=t[2],r=t[5];o[t[1]]=n.add,r&&n.add(function(){a=r},i[3-e][2].disable,i[3-e][3].disable,i[0][2].lock,i[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),o.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),a=s.call(arguments),i=E.Deferred(),o=function(t){return function(e){r[t]=this,a[t]=1<arguments.length?s.call(arguments):e,--n||i.resolveWith(r,a)}};if(n<=1&&(Y(e,i.done(o(t)).resolve,i.reject,!n),"pending"===i.state()||y(a[t]&&a[t].then)))return i.then();for(;t--;)Y(a[t],o(t),i.reject);return i.promise()}});var W=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;E.Deferred.exceptionHook=function(e,t){x.console&&x.console.warn&&e&&W.test(e.name)&&x.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},E.readyException=function(e){x.setTimeout(function(){throw e})};var q=E.Deferred();function I(){k.removeEventListener("DOMContentLoaded",I),x.removeEventListener("load",I),E.ready()}E.fn.ready=function(e){return q.then(e).catch(function(e){E.readyException(e)}),this},E.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--E.readyWait:E.isReady)||(E.isReady=!0)!==e&&0<--E.readyWait||q.resolveWith(k,[E])}}),E.ready.then=q.then,"complete"===k.readyState||"loading"!==k.readyState&&!k.documentElement.doScroll?x.setTimeout(E.ready):(k.addEventListener("DOMContentLoaded",I),x.addEventListener("load",I));var H=function(e,t,n,r,a,i,o){var s=0,u=e.length,c=null==n;if("object"===w(n))for(s in a=!0,n)H(e,t,s,n[s],!0,i,o);else if(void 0!==r&&(a=!0,y(r)||(o=!0),c&&(t=o?(t.call(e,r),null):(c=t,function(e,t,n){return c.call(E(e),n)})),t))for(;s<u;s++)t(e[s],n,o?r:r.call(e[s],s,t(e[s],n)));return a?e:c?t.call(e):u?t(e[0],n):i},F=/^-ms-/,B=/-([a-z])/g;function G(e,t){return t.toUpperCase()}function U(e){return e.replace(F,"ms-").replace(B,G)}var $=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function V(){this.expando=E.expando+V.uid++}V.uid=1,V.prototype={cache:function(e){var t=e[this.expando];return t||(t={},$(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,a=this.cache(e);if("string"==typeof t)a[U(t)]=n;else for(r in t)a[U(r)]=t[r];return a},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][U(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(U):(t=U(t))in r?[t]:t.match(P)||[]).length;for(;n--;)delete r[t[n]]}(void 0===t||E.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&&!E.isEmptyObject(t)}};var J=new V,K=new V,X=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Z=/[A-Z]/g;function Q(e,t,n){var r,a;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(Z,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(a=n)||"false"!==a&&("null"===a?null:a===+a+""?+a:X.test(a)?JSON.parse(a):a)}catch(e){}K.set(e,t,n)}else n=void 0;return n}E.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)}}),E.fn.extend({data:function(n,e){var t,r,a,i=this[0],o=i&&i.attributes;if(void 0!==n)return"object"==typeof n?this.each(function(){K.set(this,n)}):H(this,function(e){var t;if(i&&void 0===e)return void 0!==(t=K.get(i,n))?t:void 0!==(t=Q(i,n))?t:void 0;this.each(function(){K.set(this,n,e)})},null,e,1<arguments.length,null,!0);if(this.length&&(a=K.get(i),1===i.nodeType&&!J.get(i,"hasDataAttrs"))){for(t=o.length;t--;)o[t]&&0===(r=o[t].name).indexOf("data-")&&(r=U(r.slice(5)),Q(i,r,a[r]));J.set(i,"hasDataAttrs",!0)}return a},removeData:function(e){return this.each(function(){K.remove(this,e)})}}),E.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,E.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=E.queue(e,t),r=n.length,a=n.shift(),i=E._queueHooks(e,t);"inprogress"===a&&(a=n.shift(),r--),a&&("fx"===t&&n.unshift("inprogress"),delete i.stop,a.call(e,function(){E.dequeue(e,t)},i)),!r&&i&&i.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return J.get(e,n)||J.access(e,n,{empty:E.Callbacks("once memory").add(function(){J.remove(e,[t+"queue",n])})})}}),E.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?E.queue(this[0],t):void 0===n?this:this.each(function(){var e=E.queue(this,t,n);E._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&E.dequeue(this,t)})},dequeue:function(e){return this.each(function(){E.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,a=E.Deferred(),i=this,o=this.length,s=function(){--r||a.resolveWith(i,[i])};for("string"!=typeof e&&(t=e,e=void 0),e=e||"fx";o--;)(n=J.get(i[o],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),a.promise(t)}});var ee=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,te=new RegExp("^(?:([+-])=|)("+ee+")([a-z%]*)$","i"),ne=["Top","Right","Bottom","Left"],re=k.documentElement,ae=function(e){return E.contains(e.ownerDocument,e)},ie={composed:!0};re.getRootNode&&(ae=function(e){return E.contains(e.ownerDocument,e)||e.getRootNode(ie)===e.ownerDocument});var oe=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&ae(e)&&"none"===E.css(e,"display")},se=function(e,t,n,r){var a,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in a=n.apply(e,r||[]),t)e.style[i]=o[i];return a};function ue(e,t,n,r){var a,i,o=20,s=r?function(){return r.cur()}:function(){return E.css(e,t,"")},u=s(),c=n&&n[3]||(E.cssNumber[t]?"":"px"),l=e.nodeType&&(E.cssNumber[t]||"px"!==c&&+u)&&te.exec(E.css(e,t));if(l&&l[3]!==c){for(u/=2,c=c||l[3],l=+u||1;o--;)E.style(e,t,l+c),(1-i)*(1-(i=s()/u||.5))<=0&&(o=0),l/=i;l*=2,E.style(e,t,l+c),n=n||[]}return n&&(l=+l||+u||0,a=n[1]?l+(n[1]+1)*n[2]:+n[2],r&&(r.unit=c,r.start=l,r.end=a)),a}var ce={};function le(e,t){for(var n,r,a,i,o,s,u,c=[],l=0,f=e.length;l<f;l++)(r=e[l]).style&&(n=r.style.display,t?("none"===n&&(c[l]=J.get(r,"display")||null,c[l]||(r.style.display="")),""===r.style.display&&oe(r)&&(c[l]=(u=o=i=void 0,o=(a=r).ownerDocument,s=a.nodeName,(u=ce[s])||(i=o.body.appendChild(o.createElement(s)),u=E.css(i,"display"),i.parentNode.removeChild(i),"none"===u&&(u="block"),ce[s]=u)))):"none"!==n&&(c[l]="none",J.set(r,"display",n)));for(l=0;l<f;l++)null!=c[l]&&(e[l].style.display=c[l]);return e}E.fn.extend({show:function(){return le(this,!0)},hide:function(){return le(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){oe(this)?E(this).show():E(this).hide()})}});var fe=/^(?:checkbox|radio)$/i,he=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,de=/^$|^module$|\/(?:java|ecma)script/i,pe={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,"",""]};function me(e,t){var n;return n=void 0!==e.getElementsByTagName?e.getElementsByTagName(t||"*"):void 0!==e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&M(e,t)?E.merge([e],n):n}function ge(e,t){for(var n=0,r=e.length;n<r;n++)J.set(e[n],"globalEval",!t||J.get(t[n],"globalEval"))}pe.optgroup=pe.option,pe.tbody=pe.tfoot=pe.colgroup=pe.caption=pe.thead,pe.th=pe.td;var ve,ye,_e=/<|&#?\w+;/;function be(e,t,n,r,a){for(var i,o,s,u,c,l,f=t.createDocumentFragment(),h=[],d=0,p=e.length;d<p;d++)if((i=e[d])||0===i)if("object"===w(i))E.merge(h,i.nodeType?[i]:i);else if(_e.test(i)){for(o=o||f.appendChild(t.createElement("div")),s=(he.exec(i)||["",""])[1].toLowerCase(),u=pe[s]||pe._default,o.innerHTML=u[1]+E.htmlPrefilter(i)+u[2],l=u[0];l--;)o=o.lastChild;E.merge(h,o.childNodes),(o=f.firstChild).textContent=""}else h.push(t.createTextNode(i));for(f.textContent="",d=0;i=h[d++];)if(r&&-1<E.inArray(i,r))a&&a.push(i);else if(c=ae(i),o=me(f.appendChild(i),"script"),c&&ge(o),n)for(l=0;i=o[l++];)de.test(i.type||"")&&n.push(i);return f}ve=k.createDocumentFragment().appendChild(k.createElement("div")),(ye=k.createElement("input")).setAttribute("type","radio"),ye.setAttribute("checked","checked"),ye.setAttribute("name","t"),ve.appendChild(ye),v.checkClone=ve.cloneNode(!0).cloneNode(!0).lastChild.checked,ve.innerHTML="<textarea>x</textarea>",v.noCloneChecked=!!ve.cloneNode(!0).lastChild.defaultValue;var we=/^key/,Ae=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,xe=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Ee(){return!1}function Se(e,t){return e===function(){try{return k.activeElement}catch(e){}}()==("focus"===t)}function Me(e,t,n,r,a,i){var o,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Me(e,s,n,r,t[s],i);return e}if(null==r&&null==a?(a=n,r=n=void 0):null==a&&("string"==typeof n?(a=r,r=void 0):(a=r,r=n,n=void 0)),!1===a)a=Ee;else if(!a)return e;return 1===i&&(o=a,(a=function(e){return E().off(e),o.apply(this,arguments)}).guid=o.guid||(o.guid=E.guid++)),e.each(function(){E.event.add(this,t,a,r,n)})}function Te(e,a,i){i?(J.set(e,a,!1),E.event.add(e,a,{namespace:!1,handler:function(e){var t,n,r=J.get(this,a);if(1&e.isTrigger&&this[a]){if(r.length)(E.event.special[a]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),J.set(this,a,r),t=i(this,a),this[a](),r!==(n=J.get(this,a))||t?J.set(this,a,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(J.set(this,a,{value:E.event.trigger(E.extend(r[0],E.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===J.get(e,a)&&E.event.add(e,a,ke)}E.event={global:{},add:function(t,e,n,r,a){var i,o,s,u,c,l,f,h,d,p,m,g=J.get(t);if(g)for(n.handler&&(n=(i=n).handler,a=i.selector),a&&E.find.matchesSelector(re,a),n.guid||(n.guid=E.guid++),(u=g.events)||(u=g.events={}),(o=g.handle)||(o=g.handle=function(e){return void 0!==E&&E.event.triggered!==e.type?E.event.dispatch.apply(t,arguments):void 0}),c=(e=(e||"").match(P)||[""]).length;c--;)d=m=(s=xe.exec(e[c])||[])[1],p=(s[2]||"").split(".").sort(),d&&(f=E.event.special[d]||{},d=(a?f.delegateType:f.bindType)||d,f=E.event.special[d]||{},l=E.extend({type:d,origType:m,data:r,handler:n,guid:n.guid,selector:a,needsContext:a&&E.expr.match.needsContext.test(a),namespace:p.join(".")},i),(h=u[d])||((h=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,p,o)||t.addEventListener&&t.addEventListener(d,o)),f.add&&(f.add.call(t,l),l.handler.guid||(l.handler.guid=n.guid)),a?h.splice(h.delegateCount++,0,l):h.push(l),E.event.global[d]=!0)},remove:function(e,t,n,r,a){var i,o,s,u,c,l,f,h,d,p,m,g=J.hasData(e)&&J.get(e);if(g&&(u=g.events)){for(c=(t=(t||"").match(P)||[""]).length;c--;)if(d=m=(s=xe.exec(t[c])||[])[1],p=(s[2]||"").split(".").sort(),d){for(f=E.event.special[d]||{},h=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),o=i=h.length;i--;)l=h[i],!a&&m!==l.origType||n&&n.guid!==l.guid||s&&!s.test(l.namespace)||r&&r!==l.selector&&("**"!==r||!l.selector)||(h.splice(i,1),l.selector&&h.delegateCount--,f.remove&&f.remove.call(e,l));o&&!h.length&&(f.teardown&&!1!==f.teardown.call(e,p,g.handle)||E.removeEvent(e,d,g.handle),delete u[d])}else for(d in u)E.event.remove(e,d+t[c],n,r,!0);E.isEmptyObject(u)&&J.remove(e,"handle events")}},dispatch:function(e){var t,n,r,a,i,o,s=E.event.fix(e),u=new Array(arguments.length),c=(J.get(this,"events")||{})[s.type]||[],l=E.event.special[s.type]||{};for(u[0]=s,t=1;t<arguments.length;t++)u[t]=arguments[t];if(s.delegateTarget=this,!l.preDispatch||!1!==l.preDispatch.call(this,s)){for(o=E.event.handlers.call(this,s,c),t=0;(a=o[t++])&&!s.isPropagationStopped();)for(s.currentTarget=a.elem,n=0;(i=a.handlers[n++])&&!s.isImmediatePropagationStopped();)s.rnamespace&&!1!==i.namespace&&!s.rnamespace.test(i.namespace)||(s.handleObj=i,s.data=i.data,void 0!==(r=((E.event.special[i.origType]||{}).handle||i.handler).apply(a.elem,u))&&!1===(s.result=r)&&(s.preventDefault(),s.stopPropagation()));return l.postDispatch&&l.postDispatch.call(this,s),s.result}},handlers:function(e,t){var n,r,a,i,o,s=[],u=t.delegateCount,c=e.target;if(u&&c.nodeType&&!("click"===e.type&&1<=e.button))for(;c!==this;c=c.parentNode||this)if(1===c.nodeType&&("click"!==e.type||!0!==c.disabled)){for(i=[],o={},n=0;n<u;n++)void 0===o[a=(r=t[n]).selector+" "]&&(o[a]=r.needsContext?-1<E(a,this).index(c):E.find(a,this,null,[c]).length),o[a]&&i.push(r);i.length&&s.push({elem:c,handlers:i})}return c=this,u<t.length&&s.push({elem:c,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(E.Event.prototype,t,{enumerable:!0,configurable:!0,get:y(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[E.expando]?e:new E.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return fe.test(t.type)&&t.click&&M(t,"input")&&Te(t,"click",ke),!1},trigger:function(e){var t=this||e;return fe.test(t.type)&&t.click&&M(t,"input")&&Te(t,"click"),!0},_default:function(e){var t=e.target;return fe.test(t.type)&&t.click&&M(t,"input")&&J.get(t,"click")||M(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},E.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},E.Event=function(e,t){if(!(this instanceof E.Event))return new E.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?ke:Ee,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&E.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[E.expando]=!0},E.Event.prototype={constructor:E.Event,isDefaultPrevented:Ee,isPropagationStopped:Ee,isImmediatePropagationStopped:Ee,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=ke,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=ke,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=ke,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},E.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,char:!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&we.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&Ae.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},E.event.addProp),E.each({focus:"focusin",blur:"focusout"},function(e,t){E.event.special[e]={setup:function(){return Te(this,e,Se),!1},trigger:function(){return Te(this,e),!0},delegateType:t}}),E.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,a){E.event.special[e]={delegateType:a,bindType:a,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||E.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=a),t}}}),E.fn.extend({on:function(e,t,n,r){return Me(this,e,t,n,r)},one:function(e,t,n,r){return Me(this,e,t,n,r,1)},off:function(e,t,n){var r,a;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,E(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"!=typeof e)return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Ee),this.each(function(){E.event.remove(this,e,n,t)});for(a in e)this.off(a,t,e[a]);return this}});var Ce=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,De=/<script|<style|<link/i,Oe=/checked\s*(?:[^=]|=\s*.checked.)/i,je=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Ne(e,t){return M(e,"table")&&M(11!==t.nodeType?t:t.firstChild,"tr")&&E(e).children("tbody")[0]||e}function ze(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Pe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,a,i,o,s,u,c;if(1===t.nodeType){if(J.hasData(e)&&(i=J.access(e),o=J.set(t,i),c=i.events))for(a in delete o.handle,o.events={},c)for(n=0,r=c[a].length;n<r;n++)E.event.add(t,a,c[a][n]);K.hasData(e)&&(s=K.access(e),u=E.extend({},s),K.set(t,u))}}function Re(n,r,a,i){r=m.apply([],r);var e,t,o,s,u,c,l=0,f=n.length,h=f-1,d=r[0],p=y(d);if(p||1<f&&"string"==typeof d&&!v.checkClone&&Oe.test(d))return n.each(function(e){var t=n.eq(e);p&&(r[0]=d.call(this,e,t.html())),Re(t,r,a,i)});if(f&&(t=(e=be(r,n[0].ownerDocument,!1,n,i)).firstChild,1===e.childNodes.length&&(e=t),t||i)){for(s=(o=E.map(me(e,"script"),ze)).length;l<f;l++)u=e,l!==h&&(u=E.clone(u,!0,!0),s&&E.merge(o,me(u,"script"))),a.call(n[l],u,l);if(s)for(c=o[o.length-1].ownerDocument,E.map(o,Pe),l=0;l<s;l++)u=o[l],de.test(u.type||"")&&!J.access(u,"globalEval")&&E.contains(c,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?E._evalUrl&&!u.noModule&&E._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")}):b(u.textContent.replace(je,""),u,c))}return n}function Ye(e,t,n){for(var r,a=t?E.filter(t,e):e,i=0;null!=(r=a[i]);i++)n||1!==r.nodeType||E.cleanData(me(r)),r.parentNode&&(n&&ae(r)&&ge(me(r,"script")),r.parentNode.removeChild(r));return e}E.extend({htmlPrefilter:function(e){return e.replace(Ce,"<$1></$2>")},clone:function(e,t,n){var r,a,i,o,s,u,c,l=e.cloneNode(!0),f=ae(e);if(!(v.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||E.isXMLDoc(e)))for(o=me(l),r=0,a=(i=me(e)).length;r<a;r++)s=i[r],"input"===(c=(u=o[r]).nodeName.toLowerCase())&&fe.test(s.type)?u.checked=s.checked:"input"!==c&&"textarea"!==c||(u.defaultValue=s.defaultValue);if(t)if(n)for(i=i||me(e),o=o||me(l),r=0,a=i.length;r<a;r++)Le(i[r],o[r]);else Le(e,l);return 0<(o=me(l,"script")).length&&ge(o,!f&&me(e,"script")),l},cleanData:function(e){for(var t,n,r,a=E.event.special,i=0;void 0!==(n=e[i]);i++)if($(n)){if(t=n[J.expando]){if(t.events)for(r in t.events)a[r]?E.event.remove(n,r):E.removeEvent(n,r,t.handle);n[J.expando]=void 0}n[K.expando]&&(n[K.expando]=void 0)}}}),E.fn.extend({detach:function(e){return Ye(this,e,!0)},remove:function(e){return Ye(this,e)},text:function(e){return H(this,function(e){return void 0===e?E.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||Ne(this,e).appendChild(e)})},prepend:function(){return Re(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Ne(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&&(E.cleanData(me(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return E.clone(this,e,t)})},html:function(e){return H(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&&!De.test(e)&&!pe[(he.exec(e)||["",""])[1].toLowerCase()]){e=E.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(E.cleanData(me(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return Re(this,arguments,function(e){var t=this.parentNode;E.inArray(this,n)<0&&(E.cleanData(me(this)),t&&t.replaceChild(e,this))},n)}}),E.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,o){E.fn[e]=function(e){for(var t,n=[],r=E(e),a=r.length-1,i=0;i<=a;i++)t=i===a?this:this.clone(!0),E(r[i])[o](t),u.apply(n,t.get());return this.pushStack(n)}});var We=new RegExp("^("+ee+")(?!px)[a-z%]+$","i"),qe=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=x),t.getComputedStyle(e)},Ie=new RegExp(ne.join("|"),"i");function He(e,t,n){var r,a,i,o,s=e.style;return(n=n||qe(e))&&(""!==(o=n.getPropertyValue(t)||n[t])||ae(e)||(o=E.style(e,t)),!v.pixelBoxStyles()&&We.test(o)&&Ie.test(t)&&(r=s.width,a=s.minWidth,i=s.maxWidth,s.minWidth=s.maxWidth=s.width=o,o=n.width,s.width=r,s.minWidth=a,s.maxWidth=i)),void 0!==o?o+"":o}function Fe(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(u){s.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",u.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",re.appendChild(s).appendChild(u);var e=x.getComputedStyle(u);n="1%"!==e.top,o=12===t(e.marginLeft),u.style.right="60%",i=36===t(e.right),r=36===t(e.width),u.style.position="absolute",a=12===t(u.offsetWidth/3),re.removeChild(s),u=null}}function t(e){return Math.round(parseFloat(e))}var n,r,a,i,o,s=k.createElement("div"),u=k.createElement("div");u.style&&(u.style.backgroundClip="content-box",u.cloneNode(!0).style.backgroundClip="",v.clearCloneStyle="content-box"===u.style.backgroundClip,E.extend(v,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),i},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),o},scrollboxSize:function(){return e(),a}}))}();var Be=["Webkit","Moz","ms"],Ge=k.createElement("div").style,Ue={};function $e(e){return E.cssProps[e]||Ue[e]||(e in Ge?e:Ue[e]=function(e){for(var t=e[0].toUpperCase()+e.slice(1),n=Be.length;n--;)if((e=Be[n]+t)in Ge)return e}(e)||e)}var Ve=/^(none|table(?!-c[ea]).+)/,Je=/^--/,Ke={position:"absolute",visibility:"hidden",display:"block"},Xe={letterSpacing:"0",fontWeight:"400"};function Ze(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Qe(e,t,n,r,a,i){var o="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;o<4;o+=2)"margin"===n&&(u+=E.css(e,n+ne[o],!0,a)),r?("content"===n&&(u-=E.css(e,"padding"+ne[o],!0,a)),"margin"!==n&&(u-=E.css(e,"border"+ne[o]+"Width",!0,a))):(u+=E.css(e,"padding"+ne[o],!0,a),"padding"!==n?u+=E.css(e,"border"+ne[o]+"Width",!0,a):s+=E.css(e,"border"+ne[o]+"Width",!0,a));return!r&&0<=i&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-i-u-s-.5))||0),u}function et(e,t,n){var r=qe(e),a=(!v.boxSizingReliable()||n)&&"border-box"===E.css(e,"boxSizing",!1,r),i=a,o=He(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(We.test(o)){if(!n)return o;o="auto"}return(!v.boxSizingReliable()&&a||"auto"===o||!parseFloat(o)&&"inline"===E.css(e,"display",!1,r))&&e.getClientRects().length&&(a="border-box"===E.css(e,"boxSizing",!1,r),(i=s in e)&&(o=e[s])),(o=parseFloat(o)||0)+Qe(e,t,n||(a?"border":"content"),i,r,o)+"px"}function tt(e,t,n,r,a){return new tt.prototype.init(e,t,n,r,a)}E.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=He(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var a,i,o,s=U(t),u=Je.test(t),c=e.style;if(u||(t=$e(s)),o=E.cssHooks[t]||E.cssHooks[s],void 0===n)return o&&"get"in o&&void 0!==(a=o.get(e,!1,r))?a:c[t];"string"==(i=typeof n)&&(a=te.exec(n))&&a[1]&&(n=ue(e,t,a),i="number"),null!=n&&n==n&&("number"!==i||u||(n+=a&&a[3]||(E.cssNumber[s]?"":"px")),v.clearCloneStyle||""!==n||0!==t.indexOf("background")||(c[t]="inherit"),o&&"set"in o&&void 0===(n=o.set(e,n,r))||(u?c.setProperty(t,n):c[t]=n))}},css:function(e,t,n,r){var a,i,o,s=U(t);return Je.test(t)||(t=$e(s)),(o=E.cssHooks[t]||E.cssHooks[s])&&"get"in o&&(a=o.get(e,!0,n)),void 0===a&&(a=He(e,t,r)),"normal"===a&&t in Xe&&(a=Xe[t]),""===n||n?(i=parseFloat(a),!0===n||isFinite(i)?i||0:a):a}}),E.each(["height","width"],function(e,u){E.cssHooks[u]={get:function(e,t,n){if(t)return!Ve.test(E.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?et(e,u,n):se(e,Ke,function(){return et(e,u,n)})},set:function(e,t,n){var r,a=qe(e),i=!v.scrollboxSize()&&"absolute"===a.position,o=(i||n)&&"border-box"===E.css(e,"boxSizing",!1,a),s=n?Qe(e,u,n,o,a):0;return o&&i&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(a[u])-Qe(e,u,"border",!1,a)-.5)),s&&(r=te.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=E.css(e,u)),Ze(0,t,s)}}}),E.cssHooks.marginLeft=Fe(v.reliableMarginLeft,function(e,t){if(t)return(parseFloat(He(e,"marginLeft"))||e.getBoundingClientRect().left-se(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),E.each({margin:"",padding:"",border:"Width"},function(a,i){E.cssHooks[a+i]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[a+ne[t]+i]=r[t]||r[t-2]||r[0];return n}},"margin"!==a&&(E.cssHooks[a+i].set=Ze)}),E.fn.extend({css:function(e,t){return H(this,function(e,t,n){var r,a,i={},o=0;if(Array.isArray(t)){for(r=qe(e),a=t.length;o<a;o++)i[t[o]]=E.css(e,t[o],!1,r);return i}return void 0!==n?E.style(e,t,n):E.css(e,t)},e,t,1<arguments.length)}}),((E.Tween=tt).prototype={constructor:tt,init:function(e,t,n,r,a,i){this.elem=e,this.prop=n,this.easing=a||E.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=i||(E.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=E.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}}).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=E.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){E.fx.step[e.prop]?E.fx.step[e.prop](e):1!==e.elem.nodeType||!E.cssHooks[e.prop]&&null==e.elem.style[$e(e.prop)]?e.elem[e.prop]=e.now:E.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=tt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},E.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},E.fx=tt.prototype.init,E.fx.step={};var nt,rt,at,it,ot=/^(?:toggle|show|hide)$/,st=/queueHooks$/;function ut(){rt&&(!1===k.hidden&&x.requestAnimationFrame?x.requestAnimationFrame(ut):x.setTimeout(ut,E.fx.interval),E.fx.tick())}function ct(){return x.setTimeout(function(){nt=void 0}),nt=Date.now()}function lt(e,t){var n,r=0,a={height:e};for(t=t?1:0;r<4;r+=2-t)a["margin"+(n=ne[r])]=a["padding"+n]=e;return t&&(a.opacity=a.width=e),a}function ft(e,t,n){for(var r,a=(ht.tweeners[t]||[]).concat(ht.tweeners["*"]),i=0,o=a.length;i<o;i++)if(r=a[i].call(n,t,e))return r}function ht(i,e,t){var n,o,r=0,a=ht.prefilters.length,s=E.Deferred().always(function(){delete u.elem}),u=function(){if(o)return!1;for(var e=nt||ct(),t=Math.max(0,c.startTime+c.duration-e),n=1-(t/c.duration||0),r=0,a=c.tweens.length;r<a;r++)c.tweens[r].run(n);return s.notifyWith(i,[c,n,t]),n<1&&a?t:(a||s.notifyWith(i,[c,1,0]),s.resolveWith(i,[c]),!1)},c=s.promise({elem:i,props:E.extend({},e),opts:E.extend(!0,{specialEasing:{},easing:E.easing._default},t),originalProperties:e,originalOptions:t,startTime:nt||ct(),duration:t.duration,tweens:[],createTween:function(e,t){var n=E.Tween(i,c.opts,e,t,c.opts.specialEasing[e]||c.opts.easing);return c.tweens.push(n),n},stop:function(e){var t=0,n=e?c.tweens.length:0;if(o)return this;for(o=!0;t<n;t++)c.tweens[t].run(1);return e?(s.notifyWith(i,[c,1,0]),s.resolveWith(i,[c,e])):s.rejectWith(i,[c,e]),this}}),l=c.props;for(function(e,t){var n,r,a,i,o;for(n in e)if(a=t[r=U(n)],i=e[n],Array.isArray(i)&&(a=i[1],i=e[n]=i[0]),n!==r&&(e[r]=i,delete e[n]),(o=E.cssHooks[r])&&"expand"in o)for(n in i=o.expand(i),delete e[r],i)n in e||(e[n]=i[n],t[n]=a);else t[r]=a}(l,c.opts.specialEasing);r<a;r++)if(n=ht.prefilters[r].call(c,i,l,c.opts))return y(n.stop)&&(E._queueHooks(c.elem,c.opts.queue).stop=n.stop.bind(n)),n;return E.map(l,ft,c),y(c.opts.start)&&c.opts.start.call(i,c),c.progress(c.opts.progress).done(c.opts.done,c.opts.complete).fail(c.opts.fail).always(c.opts.always),E.fx.timer(E.extend(u,{elem:i,anim:c,queue:c.opts.queue})),c}E.Animation=E.extend(ht,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return ue(n.elem,e,te.exec(t),n),n}]},tweener:function(e,t){for(var n,r=0,a=(e=y(e)?(t=e,["*"]):e.match(P)).length;r<a;r++)n=e[r],ht.tweeners[n]=ht.tweeners[n]||[],ht.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,a,i,o,s,u,c,l,f="width"in t||"height"in t,h=this,d={},p=e.style,m=e.nodeType&&oe(e),g=J.get(e,"fxshow");for(r in n.queue||(null==(o=E._queueHooks(e,"fx")).unqueued&&(o.unqueued=0,s=o.empty.fire,o.empty.fire=function(){o.unqueued||s()}),o.unqueued++,h.always(function(){h.always(function(){o.unqueued--,E.queue(e,"fx").length||o.empty.fire()})})),t)if(a=t[r],ot.test(a)){if(delete t[r],i=i||"toggle"===a,a===(m?"hide":"show")){if("show"!==a||!g||void 0===g[r])continue;m=!0}d[r]=g&&g[r]||E.style(e,r)}if((u=!E.isEmptyObject(t))||!E.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],null==(c=g&&g.display)&&(c=J.get(e,"display")),"none"===(l=E.css(e,"display"))&&(c?l=c:(le([e],!0),c=e.style.display||c,l=E.css(e,"display"),le([e]))),("inline"===l||"inline-block"===l&&null!=c)&&"none"===E.css(e,"float")&&(u||(h.done(function(){p.display=c}),null==c&&(l=p.display,c="none"===l?"":l)),p.display="inline-block")),n.overflow&&(p.overflow="hidden",h.always(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]})),u=!1,d)u||(g?"hidden"in g&&(m=g.hidden):g=J.access(e,"fxshow",{display:c}),i&&(g.hidden=!m),m&&le([e],!0),h.done(function(){for(r in m||le([e]),J.remove(e,"fxshow"),d)E.style(e,r,d[r])})),u=ft(m?g[r]:0,r,h),r in g||(g[r]=u.start,m&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?ht.prefilters.unshift(e):ht.prefilters.push(e)}}),E.speed=function(e,t,n){var r=e&&"object"==typeof e?E.extend({},e):{complete:n||!n&&t||y(e)&&e,duration:e,easing:n&&t||t&&!y(t)&&t};return E.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in E.fx.speeds?r.duration=E.fx.speeds[r.duration]:r.duration=E.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){y(r.old)&&r.old.call(this),r.queue&&E.dequeue(this,r.queue)},r},E.fn.extend({fadeTo:function(e,t,n,r){return this.filter(oe).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var a=E.isEmptyObject(t),i=E.speed(e,n,r),o=function(){var e=ht(this,E.extend({},t),i);(a||J.get(this,"finish"))&&e.stop(!0)};return o.finish=o,a||!1===i.queue?this.each(o):this.queue(i.queue,o)},stop:function(a,e,i){var o=function(e){var t=e.stop;delete e.stop,t(i)};return"string"!=typeof a&&(i=e,e=a,a=void 0),e&&!1!==a&&this.queue(a||"fx",[]),this.each(function(){var e=!0,t=null!=a&&a+"queueHooks",n=E.timers,r=J.get(this);if(t)r[t]&&r[t].stop&&o(r[t]);else for(t in r)r[t]&&r[t].stop&&st.test(t)&&o(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=a&&n[t].queue!==a||(n[t].anim.stop(i),e=!1,n.splice(t,1));!e&&i||E.dequeue(this,a)})},finish:function(o){return!1!==o&&(o=o||"fx"),this.each(function(){var e,t=J.get(this),n=t[o+"queue"],r=t[o+"queueHooks"],a=E.timers,i=n?n.length:0;for(t.finish=!0,E.queue(this,o,[]),r&&r.stop&&r.stop.call(this,!0),e=a.length;e--;)a[e].elem===this&&a[e].queue===o&&(a[e].anim.stop(!0),a.splice(e,1));for(e=0;e<i;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),E.each(["toggle","show","hide"],function(e,r){var a=E.fn[r];E.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?a.apply(this,arguments):this.animate(lt(r,!0),e,t,n)}}),E.each({slideDown:lt("show"),slideUp:lt("hide"),slideToggle:lt("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){E.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),E.timers=[],E.fx.tick=function(){var e,t=0,n=E.timers;for(nt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||E.fx.stop(),nt=void 0},E.fx.timer=function(e){E.timers.push(e),E.fx.start()},E.fx.interval=13,E.fx.start=function(){rt||(rt=!0,ut())},E.fx.stop=function(){rt=null},E.fx.speeds={slow:600,fast:200,_default:400},E.fn.delay=function(r,e){return r=E.fx&&E.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=x.setTimeout(e,r);t.stop=function(){x.clearTimeout(n)}})},at=k.createElement("input"),it=k.createElement("select").appendChild(k.createElement("option")),at.type="checkbox",v.checkOn=""!==at.value,v.optSelected=it.selected,(at=k.createElement("input")).value="t",at.type="radio",v.radioValue="t"===at.value;var dt,pt=E.expr.attrHandle;E.fn.extend({attr:function(e,t){return H(this,E.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){E.removeAttr(this,e)})}}),E.extend({attr:function(e,t,n){var r,a,i=e.nodeType;if(3!==i&&8!==i&&2!==i)return void 0===e.getAttribute?E.prop(e,t,n):(1===i&&E.isXMLDoc(e)||(a=E.attrHooks[t.toLowerCase()]||(E.expr.match.bool.test(t)?dt:void 0)),void 0!==n?null===n?void E.removeAttr(e,t):a&&"set"in a&&void 0!==(r=a.set(e,n,t))?r:(e.setAttribute(t,n+""),n):a&&"get"in a&&null!==(r=a.get(e,t))?r:null==(r=E.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!v.radioValue&&"radio"===t&&M(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,a=t&&t.match(P);if(a&&1===e.nodeType)for(;n=a[r++];)e.removeAttribute(n)}}),dt={set:function(e,t,n){return!1===t?E.removeAttr(e,n):e.setAttribute(n,n),n}},E.each(E.expr.match.bool.source.match(/\w+/g),function(e,t){var o=pt[t]||E.find.attr;pt[t]=function(e,t,n){var r,a,i=t.toLowerCase();return n||(a=pt[i],pt[i]=r,r=null!=o(e,t,n)?i:null,pt[i]=a),r}});var mt=/^(?:input|select|textarea|button)$/i,gt=/^(?:a|area)$/i;function vt(e){return(e.match(P)||[]).join(" ")}function yt(e){return e.getAttribute&&e.getAttribute("class")||""}function _t(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(P)||[]}E.fn.extend({prop:function(e,t){return H(this,E.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[E.propFix[e]||e]})}}),E.extend({prop:function(e,t,n){var r,a,i=e.nodeType;if(3!==i&&8!==i&&2!==i)return 1===i&&E.isXMLDoc(e)||(t=E.propFix[t]||t,a=E.propHooks[t]),void 0!==n?a&&"set"in a&&void 0!==(r=a.set(e,n,t))?r:e[t]=n:a&&"get"in a&&null!==(r=a.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=E.find.attr(e,"tabindex");return t?parseInt(t,10):mt.test(e.nodeName)||gt.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),v.optSelected||(E.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)}}),E.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){E.propFix[this.toLowerCase()]=this}),E.fn.extend({addClass:function(t){var e,n,r,a,i,o,s,u=0;if(y(t))return this.each(function(e){E(this).addClass(t.call(this,e,yt(this)))});if((e=_t(t)).length)for(;n=this[u++];)if(a=yt(n),r=1===n.nodeType&&" "+vt(a)+" "){for(o=0;i=e[o++];)r.indexOf(" "+i+" ")<0&&(r+=i+" ");a!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(t){var e,n,r,a,i,o,s,u=0;if(y(t))return this.each(function(e){E(this).removeClass(t.call(this,e,yt(this)))});if(!arguments.length)return this.attr("class","");if((e=_t(t)).length)for(;n=this[u++];)if(a=yt(n),r=1===n.nodeType&&" "+vt(a)+" "){for(o=0;i=e[o++];)for(;-1<r.indexOf(" "+i+" ");)r=r.replace(" "+i+" "," ");a!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(a,t){var i=typeof a,o="string"===i||Array.isArray(a);return"boolean"==typeof t&&o?t?this.addClass(a):this.removeClass(a):y(a)?this.each(function(e){E(this).toggleClass(a.call(this,e,yt(this),t),t)}):this.each(function(){var e,t,n,r;if(o)for(t=0,n=E(this),r=_t(a);e=r[t++];)n.hasClass(e)?n.removeClass(e):n.addClass(e);else void 0!==a&&"boolean"!==i||((e=yt(this))&&J.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===a?"":J.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;for(t=" "+e+" ";n=this[r++];)if(1===n.nodeType&&-1<(" "+vt(yt(n))+" ").indexOf(t))return!0;return!1}});var bt=/\r/g;E.fn.extend({val:function(n){var r,e,a,t=this[0];return arguments.length?(a=y(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=a?n.call(this,e,E(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=E.map(t,function(e){return null==e?"":e+""})),(r=E.valHooks[this.type]||E.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=E.valHooks[t.type]||E.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(bt,""):null==e?"":e:void 0}}),E.extend({valHooks:{option:{get:function(e){var t=E.find.attr(e,"value");return null!=t?t:vt(E.text(e))}},select:{get:function(e){var t,n,r,a=e.options,i=e.selectedIndex,o="select-one"===e.type,s=o?null:[],u=o?i+1:a.length;for(r=i<0?u:o?i:0;r<u;r++)if(((n=a[r]).selected||r===i)&&!n.disabled&&(!n.parentNode.disabled||!M(n.parentNode,"optgroup"))){if(t=E(n).val(),o)return t;s.push(t)}return s},set:function(e,t){for(var n,r,a=e.options,i=E.makeArray(t),o=a.length;o--;)((r=a[o]).selected=-1<E.inArray(E.valHooks.option.get(r),i))&&(n=!0);return n||(e.selectedIndex=-1),i}}}}),E.each(["radio","checkbox"],function(){E.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<E.inArray(E(e).val(),t)}},v.checkOn||(E.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),v.focusin="onfocusin"in x;var wt=/^(?:focusinfocus|focusoutblur)$/,At=function(e){e.stopPropagation()};E.extend(E.event,{trigger:function(e,t,n,r){var a,i,o,s,u,c,l,f,h=[n||k],d=g.call(e,"type")?e.type:e,p=g.call(e,"namespace")?e.namespace.split("."):[];if(i=f=o=n=n||k,3!==n.nodeType&&8!==n.nodeType&&!wt.test(d+E.event.triggered)&&(-1<d.indexOf(".")&&(d=(p=d.split(".")).shift(),p.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[E.expando]?e:new E.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=p.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:E.makeArray(t,[e]),l=E.event.special[d]||{},r||!l.trigger||!1!==l.trigger.apply(n,t))){if(!r&&!l.noBubble&&!_(n)){for(s=l.delegateType||d,wt.test(s+d)||(i=i.parentNode);i;i=i.parentNode)h.push(i),o=i;o===(n.ownerDocument||k)&&h.push(o.defaultView||o.parentWindow||x)}for(a=0;(i=h[a++])&&!e.isPropagationStopped();)f=i,e.type=1<a?s:l.bindType||d,(c=(J.get(i,"events")||{})[e.type]&&J.get(i,"handle"))&&c.apply(i,t),(c=u&&i[u])&&c.apply&&$(i)&&(e.result=c.apply(i,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||l._default&&!1!==l._default.apply(h.pop(),t)||!$(n)||u&&y(n[d])&&!_(n)&&((o=n[u])&&(n[u]=null),E.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,At),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,At),E.event.triggered=void 0,o&&(n[u]=o)),e.result}},simulate:function(e,t,n){var r=E.extend(new E.Event,n,{type:e,isSimulated:!0});E.event.trigger(r,null,t)}}),E.fn.extend({trigger:function(e,t){return this.each(function(){E.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return E.event.trigger(e,t,n,!0)}}),v.focusin||E.each({focus:"focusin",blur:"focusout"},function(n,r){var a=function(e){E.event.simulate(r,e.target,E.event.fix(e))};E.event.special[r]={setup:function(){var e=this.ownerDocument||this,t=J.access(e,r);t||e.addEventListener(n,a,!0),J.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this,t=J.access(e,r)-1;t?J.access(e,r,t):(e.removeEventListener(n,a,!0),J.remove(e,r))}}});var xt=x.location,kt=Date.now(),Et=/\?/;E.parseXML=function(e){var t;if(!e||"string"!=typeof e)return null;try{t=(new x.DOMParser).parseFromString(e,"text/xml")}catch(e){t=void 0}return t&&!t.getElementsByTagName("parsererror").length||E.error("Invalid XML: "+e),t};var St=/\[\]$/,Mt=/\r?\n/g,Tt=/^(?:submit|button|image|reset|file)$/i,Ct=/^(?:input|select|textarea|keygen)/i;function Dt(n,e,r,a){var t;if(Array.isArray(e))E.each(e,function(e,t){r||St.test(n)?a(n,t):Dt(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,a)});else if(r||"object"!==w(e))a(n,e);else for(t in e)Dt(n+"["+t+"]",e[t],r,a)}E.param=function(e,t){var n,r=[],a=function(e,t){var n=y(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!E.isPlainObject(e))E.each(e,function(){a(this.name,this.value)});else for(n in e)Dt(n,e[n],t,a);return r.join("&")},E.fn.extend({serialize:function(){return E.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=E.prop(this,"elements");return e?E.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!E(this).is(":disabled")&&Ct.test(this.nodeName)&&!Tt.test(e)&&(this.checked||!fe.test(e))}).map(function(e,t){var n=E(this).val();return null==n?null:Array.isArray(n)?E.map(n,function(e){return{name:t.name,value:e.replace(Mt,"\r\n")}}):{name:t.name,value:n.replace(Mt,"\r\n")}}).get()}});var Ot=/%20/g,jt=/#.*$/,Nt=/([?&])_=[^&]*/,zt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Pt=/^(?:GET|HEAD)$/,Lt=/^\/\//,Rt={},Yt={},Wt="*/".concat("*"),qt=k.createElement("a");function It(i){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,a=e.toLowerCase().match(P)||[];if(y(t))for(;n=a[r++];)"+"===n[0]?(n=n.slice(1)||"*",(i[n]=i[n]||[]).unshift(t)):(i[n]=i[n]||[]).push(t)}}function Ht(t,a,i,o){var s={},u=t===Yt;function c(e){var r;return s[e]=!0,E.each(t[e]||[],function(e,t){var n=t(a,i,o);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(a.dataTypes.unshift(n),c(n),!1)}),r}return c(a.dataTypes[0])||!s["*"]&&c("*")}function Ft(e,t){var n,r,a=E.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((a[n]?e:r||(r={}))[n]=t[n]);return r&&E.extend(!0,e,r),e}qt.href=xt.href,E.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:xt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(xt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Wt,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":E.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Ft(Ft(e,E.ajaxSettings),t):Ft(E.ajaxSettings,e)},ajaxPrefilter:It(Rt),ajaxTransport:It(Yt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var l,f,h,n,d,r,p,m,a,i,g=E.ajaxSetup({},t),v=g.context||g,y=g.context&&(v.nodeType||v.jquery)?E(v):E.event,_=E.Deferred(),b=E.Callbacks("once memory"),w=g.statusCode||{},o={},s={},u="canceled",A={readyState:0,getResponseHeader:function(e){var t;if(p){if(!n)for(n={};t=zt.exec(h);)n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2]);t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return p?h:null},setRequestHeader:function(e,t){return null==p&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,o[e]=t),this},overrideMimeType:function(e){return null==p&&(g.mimeType=e),this},statusCode:function(e){var t;if(e)if(p)A.always(e[A.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return l&&l.abort(t),c(0,t),this}};if(_.promise(A),g.url=((e||g.url||xt.href)+"").replace(Lt,xt.protocol+"//"),g.type=t.method||t.type||g.method||g.type,g.dataTypes=(g.dataType||"*").toLowerCase().match(P)||[""],null==g.crossDomain){r=k.createElement("a");try{r.href=g.url,r.href=r.href,g.crossDomain=qt.protocol+"//"+qt.host!=r.protocol+"//"+r.host}catch(e){g.crossDomain=!0}}if(g.data&&g.processData&&"string"!=typeof g.data&&(g.data=E.param(g.data,g.traditional)),Ht(Rt,g,t,A),p)return A;for(a in(m=E.event&&g.global)&&0==E.active++&&E.event.trigger("ajaxStart"),g.type=g.type.toUpperCase(),g.hasContent=!Pt.test(g.type),f=g.url.replace(jt,""),g.hasContent?g.data&&g.processData&&0===(g.contentType||"").indexOf("application/x-www-form-urlencoded")&&(g.data=g.data.replace(Ot,"+")):(i=g.url.slice(f.length),g.data&&(g.processData||"string"==typeof g.data)&&(f+=(Et.test(f)?"&":"?")+g.data,delete g.data),!1===g.cache&&(f=f.replace(Nt,"$1"),i=(Et.test(f)?"&":"?")+"_="+kt+++i),g.url=f+i),g.ifModified&&(E.lastModified[f]&&A.setRequestHeader("If-Modified-Since",E.lastModified[f]),E.etag[f]&&A.setRequestHeader("If-None-Match",E.etag[f])),(g.data&&g.hasContent&&!1!==g.contentType||t.contentType)&&A.setRequestHeader("Content-Type",g.contentType),A.setRequestHeader("Accept",g.dataTypes[0]&&g.accepts[g.dataTypes[0]]?g.accepts[g.dataTypes[0]]+("*"!==g.dataTypes[0]?", "+Wt+"; q=0.01":""):g.accepts["*"]),g.headers)A.setRequestHeader(a,g.headers[a]);if(g.beforeSend&&(!1===g.beforeSend.call(v,A,g)||p))return A.abort();if(u="abort",b.add(g.complete),A.done(g.success),A.fail(g.error),l=Ht(Yt,g,t,A)){if(A.readyState=1,m&&y.trigger("ajaxSend",[A,g]),p)return A;g.async&&0<g.timeout&&(d=x.setTimeout(function(){A.abort("timeout")},g.timeout));try{p=!1,l.send(o,c)}catch(e){if(p)throw e;c(-1,e)}}else c(-1,"No Transport");function c(e,t,n,r){var a,i,o,s,u,c=t;p||(p=!0,d&&x.clearTimeout(d),l=void 0,h=r||"",A.readyState=0<e?4:0,a=200<=e&&e<300||304===e,n&&(s=function(e,t,n){for(var r,a,i,o,s=e.contents,u=e.dataTypes;"*"===u[0];)u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(a in s)if(s[a]&&s[a].test(r)){u.unshift(a);break}if(u[0]in n)i=u[0];else{for(a in n){if(!u[0]||e.converters[a+" "+u[0]]){i=a;break}o||(o=a)}i=i||o}if(i)return i!==u[0]&&u.unshift(i),n[i]}(g,A,n)),s=function(e,t,n,r){var a,i,o,s,u,c={},l=e.dataTypes.slice();if(l[1])for(o in e.converters)c[o.toLowerCase()]=e.converters[o];for(i=l.shift();i;)if(e.responseFields[i]&&(n[e.responseFields[i]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=i,i=l.shift())if("*"===i)i=u;else if("*"!==u&&u!==i){if(!(o=c[u+" "+i]||c["* "+i]))for(a in c)if((s=a.split(" "))[1]===i&&(o=c[u+" "+s[0]]||c["* "+s[0]])){!0===o?o=c[a]:!0!==c[a]&&(i=s[0],l.unshift(s[1]));break}if(!0!==o)if(o&&e.throws)t=o(t);else try{t=o(t)}catch(e){return{state:"parsererror",error:o?e:"No conversion from "+u+" to "+i}}}return{state:"success",data:t}}(g,s,A,a),a?(g.ifModified&&((u=A.getResponseHeader("Last-Modified"))&&(E.lastModified[f]=u),(u=A.getResponseHeader("etag"))&&(E.etag[f]=u)),204===e||"HEAD"===g.type?c="nocontent":304===e?c="notmodified":(c=s.state,i=s.data,a=!(o=s.error))):(o=c,!e&&c||(c="error",e<0&&(e=0))),A.status=e,A.statusText=(t||c)+"",a?_.resolveWith(v,[i,c,A]):_.rejectWith(v,[A,c,o]),A.statusCode(w),w=void 0,m&&y.trigger(a?"ajaxSuccess":"ajaxError",[A,g,a?i:o]),b.fireWith(v,[A,c]),m&&(y.trigger("ajaxComplete",[A,g]),--E.active||E.event.trigger("ajaxStop")))}return A},getJSON:function(e,t,n){return E.get(e,t,n,"json")},getScript:function(e,t){return E.get(e,void 0,t,"script")}}),E.each(["get","post"],function(e,a){E[a]=function(e,t,n,r){return y(t)&&(r=r||n,n=t,t=void 0),E.ajax(E.extend({url:e,type:a,dataType:r,data:t,success:n},E.isPlainObject(e)&&e))}}),E._evalUrl=function(e,t){return E.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){E.globalEval(e,t)}})},E.fn.extend({wrapAll:function(e){var t;return this[0]&&(y(e)&&(e=e.call(this[0])),t=E(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return y(n)?this.each(function(e){E(this).wrapInner(n.call(this,e))}):this.each(function(){var e=E(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=y(t);return this.each(function(e){E(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){E(this).replaceWith(this.childNodes)}),this}}),E.expr.pseudos.hidden=function(e){return!E.expr.pseudos.visible(e)},E.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},E.ajaxSettings.xhr=function(){try{return new x.XMLHttpRequest}catch(e){}};var Bt={0:200,1223:204},Gt=E.ajaxSettings.xhr();v.cors=!!Gt&&"withCredentials"in Gt,v.ajax=Gt=!!Gt,E.ajaxTransport(function(a){var i,o;if(v.cors||Gt&&!a.crossDomain)return{send:function(e,t){var n,r=a.xhr();if(r.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(n in a.xhrFields)r[n]=a.xhrFields[n];for(n in a.mimeType&&r.overrideMimeType&&r.overrideMimeType(a.mimeType),a.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);i=function(e){return function(){i&&(i=o=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(Bt[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=i(),o=r.onerror=r.ontimeout=i("error"),void 0!==r.onabort?r.onabort=o:r.onreadystatechange=function(){4===r.readyState&&x.setTimeout(function(){i&&o()})},i=i("abort");try{r.send(a.hasContent&&a.data||null)}catch(e){if(i)throw e}},abort:function(){i&&i()}}}),E.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),E.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 E.globalEval(e),e}}}),E.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),E.ajaxTransport("script",function(n){var r,a;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=E("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",a=function(e){r.remove(),a=null,e&&t("error"===e.type?404:200,e.type)}),k.head.appendChild(r[0])},abort:function(){a&&a()}}});var Ut,$t=[],Vt=/(=)\?(?=&|$)|\?\?/;E.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=$t.pop()||E.expando+"_"+kt++;return this[e]=!0,e}}),E.ajaxPrefilter("json jsonp",function(e,t,n){var r,a,i,o=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(o||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=y(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,o?e[o]=e[o].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return i||E.error(r+" was not called"),i[0]},e.dataTypes[0]="json",a=x[r],x[r]=function(){i=arguments},n.always(function(){void 0===a?E(x).removeProp(r):x[r]=a,e[r]&&(e.jsonpCallback=t.jsonpCallback,$t.push(r)),i&&y(a)&&a(i[0]),i=a=void 0}),"script"}),v.createHTMLDocument=((Ut=k.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===Ut.childNodes.length),E.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(v.createHTMLDocument?((r=(t=k.implementation.createHTMLDocument("")).createElement("base")).href=k.location.href,t.head.appendChild(r)):t=k),i=!n&&[],(a=T.exec(e))?[t.createElement(a[1])]:(a=be([e],t,i),i&&i.length&&E(i).remove(),E.merge([],a.childNodes)));var r,a,i},E.fn.load=function(e,t,n){var r,a,i,o=this,s=e.indexOf(" ");return-1<s&&(r=vt(e.slice(s)),e=e.slice(0,s)),y(t)?(n=t,t=void 0):t&&"object"==typeof t&&(a="POST"),0<o.length&&E.ajax({url:e,type:a||"GET",dataType:"html",data:t}).done(function(e){i=arguments,o.html(r?E("<div>").append(E.parseHTML(e)).find(r):e)}).always(n&&function(e,t){o.each(function(){n.apply(this,i||[e.responseText,t,e])})}),this},E.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){E.fn[t]=function(e){return this.on(t,e)}}),E.expr.pseudos.animated=function(t){return E.grep(E.timers,function(e){return t===e.elem}).length},E.offset={setOffset:function(e,t,n){var r,a,i,o,s,u,c=E.css(e,"position"),l=E(e),f={};"static"===c&&(e.style.position="relative"),s=l.offset(),i=E.css(e,"top"),u=E.css(e,"left"),a=("absolute"===c||"fixed"===c)&&-1<(i+u).indexOf("auto")?(o=(r=l.position()).top,r.left):(o=parseFloat(i)||0,parseFloat(u)||0),y(t)&&(t=t.call(e,n,E.extend({},s))),null!=t.top&&(f.top=t.top-s.top+o),null!=t.left&&(f.left=t.left-s.left+a),"using"in t?t.using.call(e,f):l.css(f)}},E.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){E.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],a={top:0,left:0};if("fixed"===E.css(r,"position"))t=r.getBoundingClientRect();else{for(t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;e&&(e===n.body||e===n.documentElement)&&"static"===E.css(e,"position");)e=e.parentNode;e&&e!==r&&1===e.nodeType&&((a=E(e).offset()).top+=E.css(e,"borderTopWidth",!0),a.left+=E.css(e,"borderLeftWidth",!0))}return{top:t.top-a.top-E.css(r,"marginTop",!0),left:t.left-a.left-E.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var e=this.offsetParent;e&&"static"===E.css(e,"position");)e=e.offsetParent;return e||re})}}),E.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,a){var i="pageYOffset"===a;E.fn[t]=function(e){return H(this,function(e,t,n){var r;if(_(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[a]:e[t];r?r.scrollTo(i?r.pageXOffset:n,i?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),E.each(["top","left"],function(e,n){E.cssHooks[n]=Fe(v.pixelPosition,function(e,t){if(t)return t=He(e,n),We.test(t)?E(e).position()[n]+"px":t})}),E.each({Height:"height",Width:"width"},function(o,s){E.each({padding:"inner"+o,content:s,"":"outer"+o},function(r,i){E.fn[i]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),a=r||(!0===e||!0===t?"margin":"border");return H(this,function(e,t,n){var r;return _(e)?0===i.indexOf("outer")?e["inner"+o]:e.document.documentElement["client"+o]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+o],r["scroll"+o],e.body["offset"+o],r["offset"+o],r["client"+o])):void 0===n?E.css(e,t,a):E.style(e,t,n,a)},s,n?e:void 0,n)}})}),E.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){E.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}}),E.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),E.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)}}),E.proxy=function(e,t){var n,r,a;if("string"==typeof t&&(n=e[t],t=e,e=n),y(e))return r=s.call(arguments,2),(a=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||E.guid++,a},E.holdReady=function(e){e?E.readyWait++:E.ready(!0)},E.isArray=Array.isArray,E.parseJSON=JSON.parse,E.nodeName=M,E.isFunction=y,E.isWindow=_,E.camelCase=U,E.type=w,E.now=Date.now,E.isNumeric=function(e){var t=E.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))};var Jt=x.jQuery,Kt=x.$;return E.noConflict=function(e){return x.$===E&&(x.$=Kt),e&&x.jQuery===E&&(x.jQuery=Jt),E},e||(x.jQuery=x.$=E),E},e.exports=t.document?n(t,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return n(e)}});Tr.noConflict();var Cr=function(e,t,n){return(!(3<arguments.length&&void 0!==arguments[3])||arguments[3])&&(t&&"string"==typeof t?t=Sr.find(t):t||(t=Sr)),new Tr.fn.init(e,t,n)};Cr.fn=Cr.prototype=Tr.fn,Tr.extend(Cr,Tr);var Dr=function(e){return e.find('script, style, link[rel="stylesheet"]').remove(),e};Cr.cloneHtml=function(){return Dr(Cr("html",null,null,!1).clone()).children().wrap("<div />").wrap("<div />")},Cr.root=function(){return Cr("*").first()},Cr.browser=!0;var Or=function(e){var t=e.get(0);return!(!t||!t.tagName)&&"container"===t.tagName.toLowerCase()};function jr(e,t){return Array(t+1).join(e)}Cr.html=function(e){if(e)return Or(e)||Or(e.children("container"))?e.children("container").html()||e.html():Cr("<div>").append(e.eq(0).clone()).html();var t=Dr(Cr("body",null,null,!1).clone()),n=Dr(Cr("head",null,null,!1).clone());return Sr&&0<Sr.length?Sr.children().html():Cr("<container />").append(Cr("<container>".concat(n.html(),"</container>"))).append(Cr("<container>".concat(t.html(),"</container>"))).wrap("<container />").parent().html()},Cr.load=function(e){var t=2<arguments.length&&void 0!==arguments[2]&&arguments[2];return e=e?Cr("<container />").html(e):Cr.cloneHtml(),Sr=Sr||Cr('<div class="'.concat("mercury-parsing-container",'" style="display:none;" />')),(e=Dr(e)).find("*").contents().each(function(){this.nodeType===Node.COMMENT_NODE&&Cr(this).remove()}),Sr.html(e),t?{$:Cr,html:e.html()}:Cr};var Nr=["address","article","aside","audio","blockquote","body","canvas","center","dd","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frameset","h1","h2","h3","h4","h5","h6","header","hgroup","hr","html","isindex","li","main","menu","nav","noframes","noscript","ol","output","p","pre","section","table","tbody","td","tfoot","th","thead","tr","ul"];function zr(e){return-1!==Nr.indexOf(e.nodeName.toLowerCase())}var Pr=["area","base","br","col","command","embed","hr","img","input","keygen","link","meta","param","source","track","wbr"];function Lr(e){return-1!==Pr.indexOf(e.nodeName.toLowerCase())}var Rr=Pr.join();var Yr={};function Wr(e){for(var t in this.options=e,this._keep=[],this._remove=[],this.blankRule={replacement:e.blankReplacement},this.keepReplacement=e.keepReplacement,this.defaultRule={replacement:e.defaultReplacement},this.array=[],e.rules)this.array.push(e.rules[t])}function qr(e,t,n){for(var r=0;r<e.length;r++){var a=e[r];if(Ir(a,t,n))return a}}function Ir(e,t,n){var r=e.filter;if("string"==typeof r){if(r===t.nodeName.toLowerCase())return!0}else if(Array.isArray(r)){if(-1<r.indexOf(t.nodeName.toLowerCase()))return!0}else{if("function"!=typeof r)throw new TypeError("`filter` needs to be a string, array, or function");if(r.call(e,t,n))return!0}}function Hr(e){var t=e.nextSibling||e.parentNode;return e.parentNode.removeChild(e),t}function Fr(e,t,n){return e&&e.parentNode===t||n(t)?t.nextSibling||t.parentNode:t.firstChild||t.nextSibling||t.parentNode}Yr.paragraph={filter:"p",replacement:function(e){return"\n\n"+e+"\n\n"}},Yr.lineBreak={filter:"br",replacement:function(e,t,n){return n.br+"\n"}},Yr.heading={filter:["h1","h2","h3","h4","h5","h6"],replacement:function(e,t,n){var r=Number(t.nodeName.charAt(1));return"setext"===n.headingStyle&&r<3?"\n\n"+e+"\n"+jr(1===r?"=":"-",e.length)+"\n\n":"\n\n"+jr("#",r)+" "+e+"\n\n"}},Yr.blockquote={filter:"blockquote",replacement:function(e){return"\n\n"+(e=(e=e.replace(/^\n+|\n+$/g,"")).replace(/^/gm,"> "))+"\n\n"}},Yr.list={filter:["ul","ol"],replacement:function(e,t){var n=t.parentNode;return"LI"===n.nodeName&&n.lastElementChild===t?"\n"+e:"\n\n"+e+"\n\n"}},Yr.listItem={filter:"li",replacement:function(e,t,n){e=e.replace(/^\n+/,"").replace(/\n+$/,"\n").replace(/\n/gm,"\n    ");var r=n.bulletListMarker+"   ",a=t.parentNode;if("OL"===a.nodeName){var i=a.getAttribute("start"),o=Array.prototype.indexOf.call(a.children,t);r=(i?Number(i)+o:o+1)+".  "}return r+e+(t.nextSibling&&!/\n$/.test(e)?"\n":"")}},Yr.indentedCodeBlock={filter:function(e,t){return"indented"===t.codeBlockStyle&&"PRE"===e.nodeName&&e.firstChild&&"CODE"===e.firstChild.nodeName},replacement:function(e,t,n){return"\n\n    "+t.firstChild.textContent.replace(/\n/g,"\n    ")+"\n\n"}},Yr.fencedCodeBlock={filter:function(e,t){return"fenced"===t.codeBlockStyle&&"PRE"===e.nodeName&&e.firstChild&&"CODE"===e.firstChild.nodeName},replacement:function(e,t,n){var r=((t.firstChild.className||"").match(/language-(\S+)/)||[null,""])[1];return"\n\n"+n.fence+r+"\n"+t.firstChild.textContent+"\n"+n.fence+"\n\n"}},Yr.horizontalRule={filter:"hr",replacement:function(e,t,n){return"\n\n"+n.hr+"\n\n"}},Yr.inlineLink={filter:function(e,t){return"inlined"===t.linkStyle&&"A"===e.nodeName&&e.getAttribute("href")},replacement:function(e,t){return"["+e+"]("+t.getAttribute("href")+(t.title?' "'+t.title+'"':"")+")"}},Yr.referenceLink={filter:function(e,t){return"referenced"===t.linkStyle&&"A"===e.nodeName&&e.getAttribute("href")},replacement:function(e,t,n){var r,a,i=t.getAttribute("href"),o=t.title?' "'+t.title+'"':"";switch(n.linkReferenceStyle){case"collapsed":r="["+e+"][]",a="["+e+"]: "+i+o;break;case"shortcut":r="["+e+"]",a="["+e+"]: "+i+o;break;default:var s=this.references.length+1;r="["+e+"]["+s+"]",a="["+s+"]: "+i+o}return this.references.push(a),r},references:[],append:function(e){var t="";return this.references.length&&(t="\n\n"+this.references.join("\n")+"\n\n",this.references=[]),t}},Yr.emphasis={filter:["em","i"],replacement:function(e,t,n){return e.trim()?n.emDelimiter+e+n.emDelimiter:""}},Yr.strong={filter:["strong","b"],replacement:function(e,t,n){return e.trim()?n.strongDelimiter+e+n.strongDelimiter:""}},Yr.code={filter:function(e){var t=e.previousSibling||e.nextSibling,n="PRE"===e.parentNode.nodeName&&!t;return"CODE"===e.nodeName&&!n},replacement:function(e){if(!e.trim())return"";var t="`",n="",r="",a=e.match(/`+/gm);if(a)for(/^`/.test(e)&&(n=" "),/`$/.test(e)&&(r=" ");-1!==a.indexOf(t);)t+="`";return t+n+e+r+t}},Yr.image={filter:"img",replacement:function(e,t){var n=t.alt||"",r=t.getAttribute("src")||"",a=t.title||"";return r?"!["+n+"]("+r+(a?' "'+a+'"':"")+")":""}},Wr.prototype={add:function(e,t){this.array.unshift(t)},keep:function(e){this._keep.unshift({filter:e,replacement:this.keepReplacement})},remove:function(e){this._remove.unshift({filter:e,replacement:function(){return""}})},forNode:function(e){return e.isBlank?this.blankRule:(t=qr(this.array,e,this.options))?t:(t=qr(this._keep,e,this.options))?t:(t=qr(this._remove,e,this.options))?t:this.defaultRule;var t},forEach:function(e){for(var t=0;t<this.array.length;t++)e(this.array[t],t)}};var Br="undefined"!=typeof window?window:{};var Gr,Ur,$r,Vr=function(){var e=Br.DOMParser,t=!1;try{(new e).parseFromString("","text/html")&&(t=!0)}catch(e){}return t}()?Br.DOMParser:(Gr=function(){},Ur=require("jsdom").JSDOM,Gr.prototype.parseFromString=function(e){return new Ur(e).window.document},Gr);function Jr(e){var t;"string"==typeof e?t=($r=$r||new Vr).parseFromString('<x-turndown id="turndown-root">'+e+"</x-turndown>","text/html").getElementById("turndown-root"):t=e.cloneNode(!0);return function(e){var t=e.element,n=e.isBlock,r=e.isVoid,a=e.isPre||function(e){return"PRE"===e.nodeName};if(t.firstChild&&!a(t)){for(var i=null,o=!1,s=null,u=Fr(s,t,a);u!==t;){if(3===u.nodeType||4===u.nodeType){var c=u.data.replace(/[ \r\n\t]+/g," ");if(i&&!/ $/.test(i.data)||o||" "!==c[0]||(c=c.substr(1)),!c){u=Hr(u);continue}u.data=c,i=u}else{if(1!==u.nodeType){u=Hr(u);continue}n(u)||"BR"===u.nodeName?(i&&(i.data=i.data.replace(/ $/,"")),i=null,o=!1):r(u)&&(o=!(i=null))}var l=Fr(s,u,a);s=u,u=l}i&&(i.data=i.data.replace(/ $/,""),i.data||Hr(i))}}({element:t,isBlock:zr,isVoid:Lr}),t}function Kr(e){var t,n;return e.isBlock=zr(e),e.isCode="code"===e.nodeName.toLowerCase()||e.parentNode.isCode,e.isBlank=-1===["A","TH","TD","IFRAME","SCRIPT","AUDIO","VIDEO"].indexOf((t=e).nodeName)&&/^\s*$/i.test(t.textContent)&&!Lr(t)&&!((n=t).querySelector&&n.querySelector(Rr)),e.flankingWhitespace=function(e){var t="",n="";if(!e.isBlock){var r=/^[ \r\n\t]/.test(e.textContent),a=/[ \r\n\t]$/.test(e.textContent);r&&!Xr("left",e)&&(t=" "),a&&!Xr("right",e)&&(n=" ")}return{leading:t,trailing:n}}(e),e}function Xr(e,t){var n,r,a;return r="left"===e?(n=t.previousSibling,/ $/):(n=t.nextSibling,/^ /),n&&(3===n.nodeType?a=r.test(n.nodeValue):1!==n.nodeType||zr(n)||(a=r.test(n.textContent))),a}var Zr=Array.prototype.reduce,Qr=/^\n*/,ea=/\n*$/,ta=[[/\\/g,"\\\\"],[/\*/g,"\\*"],[/^-/g,"\\-"],[/^\+ /g,"\\+ "],[/^(=+)/g,"\\$1"],[/^(#{1,6}) /g,"\\$1 "],[/`/g,"\\`"],[/^~~~/g,"\\~~~"],[/\[/g,"\\["],[/\]/g,"\\]"],[/^>/g,"\\>"],[/_/g,"\\_"],[/^(\d+)\. /g,"$1\\. "]];function na(e){if(!(this instanceof na))return new na(e);var t={rules:Yr,headingStyle:"setext",hr:"* * *",bulletListMarker:"*",codeBlockStyle:"indented",fence:"```",emDelimiter:"_",strongDelimiter:"**",linkStyle:"inlined",linkReferenceStyle:"full",br:"  ",blankReplacement:function(e,t){return t.isBlock?"\n\n":""},keepReplacement:function(e,t){return t.isBlock?"\n\n"+t.outerHTML+"\n\n":t.outerHTML},defaultReplacement:function(e,t){return t.isBlock?"\n\n"+e+"\n\n":e}};this.options=function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)n.hasOwnProperty(r)&&(e[r]=n[r])}return e}({},t,e),this.rules=new Wr(this.options)}function ra(e){var r=this;return Zr.call(e.childNodes,function(e,t){var n="";return 3===(t=new Kr(t)).nodeType?n=t.isCode?t.nodeValue:r.escape(t.nodeValue):1===t.nodeType&&(n=function(e){var t=this.rules.forNode(e),n=ra.call(this,e),r=e.flankingWhitespace;(r.leading||r.trailing)&&(n=n.trim());return r.leading+t.replacement(n,e,this.options)+r.trailing}.call(r,t)),aa(e,n)},"")}function aa(e,t){var n,r,a,i=(n=t,r=[e.match(ea)[0],n.match(Qr)[0]].sort(),(a=r[r.length-1]).length<2?a:"\n\n");return(e=e.replace(ea,""))+i+(t=t.replace(Qr,""))}na.prototype={turndown:function(e){if(null==(t=e)||"string"!=typeof t&&(!t.nodeType||1!==t.nodeType&&9!==t.nodeType&&11!==t.nodeType))throw new TypeError(e+" is not a string, or an element/document/fragment node.");var t;if(""===e)return"";var n=ra.call(this,new Jr(e));return function(t){var n=this;return this.rules.forEach(function(e){"function"==typeof e.append&&(t=aa(t,e.append(n.options)))}),t.replace(/^[\t\r\n]+/,"").replace(/[\t\r\n\s]+$/,"")}.call(this,n)},use:function(e){if(Array.isArray(e))for(var t=0;t<e.length;t++)this.use(e[t]);else{if("function"!=typeof e)throw new TypeError("plugin must be a Function or an Array of Functions");e(this)}return this},addRule:function(e,t){return this.rules.add(e,t),this},keep:function(e){return this.rules.keep(e),this},remove:function(e){return this.rules.remove(e),this},escape:function(e){return ta.reduce(function(e,t){return e.replace(t[0],t[1])},e)}};var ia=function(){return!1},oa=function(e){return e},sa=/\s{2,}(?![^<>]*<\/(pre|code|textarea)>)/g;function ua(e){return e.replace(sa," ").trim()}var ca="\t\n\v\f\r   ᠎              \u2028\u2029\ufeff",la="["+ca+"]",fa=RegExp("^"+la+la+"*"),ha=RegExp(la+la+"*$"),da=function(e,t,n){var r={},a=g(function(){return!!ca[e]()||"​…"!="​…"[e]()}),i=r[e]=a?t(pa):ca[e];n&&(r[n]=i),L(L.P+L.F*a,"String",r)},pa=da.trim=function(e,t){return e=String(u(e)),1&t&&(e=e.replace(fa,"")),2&t&&(e=e.replace(ha,"")),e},ma=da,ga=y.parseInt,va=ma.trim,ya=/^[-+]?0[xX]/,_a=8!==ga(ca+"08")||22!==ga(ca+"0x16")?function(e,t){var n=va(String(e),3);return ga(n,t>>>0||(ya.test(n)?16:10))}:ga;L(L.G+L.F*(parseInt!=_a),{parseInt:_a});var ba=M.parseInt,wa=new RegExp("(page|paging|(p(a|g|ag)?(e|enum|ewanted|ing|ination)))?(=|/)([0-9]{1,3})","i"),Aa=/[a-z]/i,xa=/^[a-z]+$/i,ka=/^[0-9]+$/i,Ea=/charset=([\w-]+)\b/;function Sa(e){return e.split("#")[0].replace(/\/$/,"")}L(L.S,"Array",{isArray:ge});var Ma=M.Array.isArray;var Ta=function(e){if(Ma(e))return e},Ca=M.getIterator=function(e){var t=Vt(e);if("function"!=typeof t)throw TypeError(e+" is not iterable!");return D(t.call(e))};var Da=function(e,t){var n=[],r=!0,a=!1,i=void 0;try{for(var o,s=Ca(e);!(r=(o=s.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){a=!0,i=e}finally{try{r||null==s.return||s.return()}finally{if(a)throw i}}return n};var Oa=function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")};var ja=function(e,t){return Ta(e)||Da(e,t)||Oa()};function Na(e,t){var n=t||Mr.parse(e),r=n.protocol,a=n.host,i=n.path,h=!1,o=i.split("/").reverse().reduce(function(e,t,n){var r,a,i,o,s=t;if(s.includes(".")){var u=s.split("."),c=ja(u,2),l=c[0],f=c[1];xa.test(f)&&(s=l)}return wa.test(s)&&n<2&&(s=s.replace(wa,"")),0===n&&(h=Aa.test(s)),r=s,i=h,o=!0,(a=n)<2&&ka.test(r)&&r.length<3&&(o=!0),0===a&&"index"===r.toLowerCase()&&(o=!1),a<2&&r.length<3&&!i&&(o=!1),o&&e.push(s),e},[]);return"".concat(r,"//").concat(a).concat(o.reverse().join("/"))}var za=new RegExp(".( |$)");function Pa(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:10;return e.trim().split(/\s+/).slice(0,t).join(" ")}function La(e){var t="utf-8",n=Ea.exec(e);null!==n&&(e=ja(n,2)[1]);return ia(e)&&(t=e),t}var Ra=function(i){var o=0;return i=i.toString(),function(){var e=i.indexOf("\r\n",o),t=i.indexOf("\n",o),n=i.indexOf("\r",o),r=[e,t,n].sort(function(e,t){return t<e?1:e<t?-1:0}).filter(function(e){return-1!==e})[0];if(void 0!==r)return s(r,r===e?2:1);var a=i.length;return a===o?null:s(a,0)};function s(e,t){var n=i.substr(o,e-o);return o=e+t,n}},Ya=/^[A-Z_]+(\/\d\.\d)? /,Wa=/^([A-Z_]+) (.+) [A-Z]+\/(\d)\.(\d)$/,qa=/^[A-Z]+\/(\d)\.(\d) (\d{3}) (.*)$/,Ia=function(e,t){return n=function(e){e&&e._header&&(e=e._header);return e&&"function"==typeof e.toString?e.toString().trim():""}(e),r=t,s=(o=n).indexOf("\r\n"),i=-1===s?o:o.slice(0,s),r&&Ya.test(i)?Ha(n):null!==(a=i.match(Wa))?{method:a[1],url:a[2],version:{major:parseInt(a[3],10),minor:parseInt(a[4],10)},headers:Ha(n)}:null!==(a=i.match(qa))?{version:{major:parseInt(a[1],10),minor:parseInt(a[2],10)},statusCode:parseInt(a[3],10),statusMessage:a[4],headers:Ha(n)}:Ha(n);var n,r,a,i,o,s};function Ha(e){var t,n,r,a={},i=Ra(e),o=i();for(Ya.test(o)&&(o=i());o;)o=(" "!==o[0]&&"\t"!==o[0]?(n&&Fa(n,r,a),t=o.indexOf(":"),n=o.substr(0,t),r=o.substr(t+1).trim()):r+=" "+o.trim(),i());return n&&Fa(n,r,a),a}function Fa(e,t,n){switch(e=e.toLowerCase()){case"set-cookie":void 0!==n[e]?n[e].push(t):n[e]=[t];break;case"content-type":case"content-length":case"user-agent":case"referer":case"host":case"authorization":case"proxy-authorization":case"if-modified-since":case"if-unmodified-since":case"from":case"location":case"max-forwards":case"retry-after":case"etag":case"last-modified":case"server":case"age":case"expires":void 0===n[e]&&(n[e]=t);break;default:"string"==typeof n[e]?n[e]+=", "+t:n[e]=t}}var Ba=XMLHttpRequest;if(!Ba)throw new Error("missing XMLHttpRequest");Ga.log={trace:$a,debug:$a,info:$a,warn:$a,error:$a};function Ga(e,t){if("function"!=typeof t)throw new Error("Bad callback given: "+t);if(!e)throw new Error("No options given");var n=e.onResponse;if((e="string"==typeof e?{uri:e}:JSON.parse(JSON.stringify(e))).onResponse=n,e.verbose&&(Ga.log=function(){var e,t,n={},r=["trace","debug","info","warn","error"];for(t=0;t<r.length;t++)n[e=r[t]]=$a,"undefined"!=typeof console&&console&&console[e]&&(n[e]=Va(console,e));return n}()),e.url&&(e.uri=e.url,delete e.url),!e.uri&&""!==e.uri)throw new Error("options.uri is a required argument");if("string"!=typeof e.uri)throw new Error("options.uri must be a string");for(var r=["proxy","_redirectsFollowed","maxRedirects","followRedirect"],a=0;a<r.length;a++)if(e[r[a]])throw new Error("options."+r[a]+" is not supported");if(e.callback=t,e.method=e.method||"GET",e.headers=e.headers||{},e.body=e.body||null,e.timeout=e.timeout||Ga.DEFAULT_TIMEOUT,e.headers.host)throw new Error("Options.headers.host is not supported");e.json&&(e.headers.accept=e.headers.accept||"application/json","GET"!==e.method&&(e.headers["content-type"]="application/json"),"boolean"!=typeof e.json?e.body=JSON.stringify(e.json):"string"!=typeof e.body&&(e.body=JSON.stringify(e.body)));var i=function(e){var t=[];for(var n in e)e.hasOwnProperty(n)&&t.push(encodeURIComponent(n)+"="+encodeURIComponent(e[n]));return t.join("&")};if(e.qs){var o="string"==typeof e.qs?e.qs:i(e.qs);-1!==e.uri.indexOf("?")?e.uri=e.uri+"&"+o:e.uri=e.uri+"?"+o}if(e.form){if("string"==typeof e.form)throw"form name unsupported";if("POST"===e.method){var s=(e.encoding||"application/x-www-form-urlencoded").toLowerCase();switch(e.headers["content-type"]=s){case"application/x-www-form-urlencoded":e.body=i(e.form).replace(/%20/g,"+");break;case"multipart/form-data":var u=function(e){var t={};t.boundry="-------------------------------"+Math.floor(1e9*Math.random());var n=[];for(var r in e)e.hasOwnProperty(r)&&n.push("--"+t.boundry+'\nContent-Disposition: form-data; name="'+r+'"\n\n'+e[r]+"\n");return n.push("--"+t.boundry+"--"),t.body=n.join(""),t.length=t.body.length,t.type="multipart/form-data; boundary="+t.boundry,t}(e.form);e.body=u.body,e.headers["content-type"]=u.type;break;default:throw new Error("unsupported encoding:"+s)}}}return e.onResponse=e.onResponse||$a,!0===e.onResponse&&(e.onResponse=t,e.callback=$a),!e.headers.authorization&&e.auth&&(e.headers.authorization="Basic "+function(e){var t,n,r,a,i,o,s,u,c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",l=0,f=0,h="",d=[];if(!e)return e;for(;t=e.charCodeAt(l++),n=e.charCodeAt(l++),r=e.charCodeAt(l++),a=(u=t<<16|n<<8|r)>>18&63,i=u>>12&63,o=u>>6&63,s=63&u,d[f++]=c.charAt(a)+c.charAt(i)+c.charAt(o)+c.charAt(s),l<e.length;);switch(h=d.join(""),e.length%3){case 1:h=h.slice(0,-2)+"==";break;case 2:h=h.slice(0,-1)+"="}return h}(e.auth.username+":"+e.auth.password)),function(n){var r=new Ba,a=!1,t=function(e){var t,n=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/;try{t=location.href}catch(e){(t=document.createElement("a")).href="",t=t.href}var r=n.exec(t.toLowerCase())||[],a=n.exec(e.toLowerCase());return!(!a||a[1]==r[1]&&a[2]==r[2]&&(a[3]||("http:"===a[1]?80:443))==(r[3]||("http:"===r[1]?80:443)))}(n.uri),e="withCredentials"in r;if(Ua+=1,r.seq_id=Ua,r.id=Ua+": "+n.method+" "+n.uri,r._id=r.id,t&&!e){var i=new Error("Browser does not support cross-origin request: "+n.uri);return i.cors="unsupported",n.callback(i,r)}r.timeoutTimer=setTimeout(function(){a=!0;var e=new Error("ETIMEDOUT");return e.code="ETIMEDOUT",e.duration=n.timeout,Ga.log.error("Timeout",{id:r._id,milliseconds:n.timeout}),n.callback(e,r)},n.timeout);var o={response:!1,loading:!1,end:!1};r.onreadystatechange=function(e){if(a)return Ga.log.debug("Ignoring timed out state change",{state:r.readyState,id:r.id});if(Ga.log.debug("State change",{state:r.readyState,id:r.id,timed_out:a}),r.readyState===Ba.OPENED)for(var t in Ga.log.debug("Request started",{id:r.id}),n.headers)r.setRequestHeader(t,n.headers[t]);else r.readyState===Ba.HEADERS_RECEIVED?s():r.readyState===Ba.LOADING?(s(),u()):r.readyState===Ba.DONE&&(s(),u(),function(){if(!o.end){if(o.end=!0,Ga.log.debug("Request done",{id:r.id}),r.body=r.responseText,r.headers=Ia(r.getAllResponseHeaders()),n.json)try{r.body=JSON.parse(r.responseText)}catch(e){return n.callback(e,r)}n.callback(null,r,r.body)}}())},r.open(n.method,n.uri,!0),t&&(r.withCredentials=!!n.withCredentials);return r.send(n.body),r;function s(){if(!o.response){if(o.response=!0,Ga.log.debug("Got response",{id:r.id,status:r.status}),clearTimeout(r.timeoutTimer),r.statusCode=r.status,t&&0==r.statusCode){var e=new Error("CORS request rejected: "+n.uri);return e.cors="rejected",o.loading=!0,o.end=!0,n.callback(e,r)}n.onResponse(null,r)}}function u(){o.loading||(o.loading=!0,Ga.log.debug("Response body loading",{id:r.id}))}}(e)}var Ua=0;Ga.withCredentials=!1,Ga.DEFAULT_TIMEOUT=18e4,Ga.defaults=function(a,e){var t=function(r){return function(e,t){for(var n in e="string"==typeof e?{uri:e}:JSON.parse(JSON.stringify(e)),a)void 0===e[n]&&(e[n]=a[n]);return r(e,t)}},n=t(Ga);return n.get=t(Ga.get),n.post=t(Ga.post),n.put=t(Ga.put),n.head=t(Ga.head),n};function $a(){}function Va(n,r){return function(e,t){"object"==typeof t&&(e+=" "+JSON.stringify(t));return n[r].call(n,e)}}["get","put","post","head"].forEach(function(e){var n=e.toUpperCase();Ga[e.toLowerCase()]=function(e){"string"==typeof e?e={method:n,uri:e}:(e=JSON.parse(JSON.stringify(e))).method=n;var t=[e].concat(Array.prototype.slice.apply(arguments,[1]));return Ga.apply(this,t)}}),Ga.couch=function(e,a){return"string"==typeof e&&(e={uri:e}),e.json=!0,e.body&&(e.json=e.body),delete e.body,a=a||$a,Ga(e,function(e,t,n){if(e)return a(e,t,n);if((t.statusCode<200||299<t.statusCode)&&n.error){for(var r in e=new Error("CouchDB error: "+(n.error.reason||n.error.error)),n)e[r]=n[r];return a(e,t,n)}return a(e,t,n)})};var Ja=Ga,Ka=Cr.browser?{}:{"User-Agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"},Xa=1e4,Za=new RegExp("^(".concat(["audio/mpeg","image/gif","image/jpeg","image/jpg"].join("|"),")$"),"i"),Qa=5242880;function ei(e){return new Xn(function(r,a){Ja(e,function(e,t,n){e?a(e):r({body:n,response:t})})})}function ti(e){var t=1<arguments.length&&void 0!==arguments[1]&&arguments[1];if(e.statusMessage&&"OK"!==e.statusMessage||200!==e.statusCode){if(!e.statusCode)throw new Error("Unable to fetch content. Original exception was ".concat(e.error));if(!t)throw new Error("Resource returned a response status code of ".concat(e.statusCode," and resource was instructed to reject non-200 status codes."))}var n=e.headers,r=n["content-type"],a=n["content-length"];if(Za.test(r))throw new Error("Content-type for this resource was ".concat(r," and is not allowed."));if(Qa<a)throw new Error("Content for this resource was too large. Maximum content length is ".concat(Qa,"."));return!0}function ni(e,t){return ri.apply(this,arguments)}function ri(){return(ri=Qn(S.mark(function e(t,n){var r,a,i,o,s,u=arguments;return S.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return r=2<u.length&&void 0!==u[2]?u[2]:{},n=n||Mr.parse(encodeURI(t)),a=pt({url:n.href,headers:pt({},Ka,r),timeout:Xa,jar:!0,encoding:null,gzip:!0,followAllRedirects:!0},"undefined"!=typeof window?{}:{followRedirect:!0}),e.next=5,ei(a);case 5:return i=e.sent,o=i.response,s=i.body,e.prev=8,ti(o),e.abrupt("return",{body:s,response:o});case 13:return e.prev=13,e.t0=e.catch(8),e.abrupt("return",{error:!0,message:e.t0.message});case 16:case"end":return e.stop()}},e,this,[[8,13]])}))).apply(this,arguments)}function ai(a,i,o){return a("meta[".concat(i,"]")).each(function(e,t){var n=a(t),r=n.attr(i);n.attr(o,r),n.removeAttr(i)}),a}var ii=y.Reflect,oi=ii&&ii.ownKeys||function(e){var t=Se.f(D(e)),n=me.f;return n?t.concat(n(e)):t};L(L.S,"Reflect",{ownKeys:oi});var si=M.Reflect.ownKeys,ui=new RegExp("transparent|spacer|blank","i"),ci="mercury-parser-keep",li=['iframe[src^="https://www.youtube.com"]','iframe[src^="https://www.youtube-nocookie.com"]','iframe[src^="http://www.youtube.com"]','iframe[src^="https://player.vimeo"]','iframe[src^="http://player.vimeo"]','iframe[src^="https://www.redditmedia.com"]'],fi=["title","script","noscript","link","style","hr","embed","iframe","object"],hi=new RegExp("^(".concat(["src","srcset","sizes","type","href","class","id","alt","xlink:href","width","height"].join("|"),")$"),"i"),di=["ul","ol","table","div","button","form"].join(","),pi=["h2","h3","h4","h5","h6"].join(","),mi=["a","blockquote","dl","div","img","p","pre","table"].join(","),gi=new RegExp(["article","articlecontent","instapaper_body","blog","body","content","entry-content-asset","entry","hentry","main","Normal","page","pagination","permalink","post","story","text","[-_]copy","\\Bcopy"].join("|"),"i"),vi=new RegExp(["adbox","advert","author","bio","bookmark","bottom","byline","clear","com-","combx","comment","comment\\B","contact","copy","credit","crumb","date","deck","excerpt","featured","foot","footer","footnote","graf","head","info","infotext","instapaper_ignore","jump","linebreak","link","masthead","media","meta","modal","outbrain","promo","pr_","related","respond","roundcontent","scroll","secondary","share","shopping","shoutbox","side","sidebar","sponsor","stamp","sub","summary","tags","tools","widget"].join("|"),"i"),yi="meta[name=generator][value^=WordPress]",_i=new RegExp("pag(e|ing|inat)","i"),bi=new RegExp("^(".concat(["article","aside","blockquote","body","br","button","canvas","caption","col","colgroup","dd","div","dl","dt","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","hr","li","map","object","ol","output","p","pre","progress","section","table","tbody","textarea","tfoot","th","thead","tr","ul","video"].join("|"),")$"),"i"),wi=["ad-break","adbox","advert","addthis","agegate","aux","blogger-labels","combx","comment","conversation","disqus","entry-unrelated","extra","foot","header","hidden","loader","login","menu","meta","nav","outbrain","pager","pagination","predicta","presence_control_external","popup","printfriendly","related","remove","remark","rss","share","shoutbox","sidebar","sociable","sponsor","taboola","tools"].join("|"),Ai=new RegExp(wi,"i"),xi=["and","article","body","blogindex","column","content","entry-content-asset","format","hfeed","hentry","hatom","main","page","posts","shadow"].join("|"),ki=new RegExp(xi,"i");function Ei(a){var i=!1;return a("br").each(function(e,t){var n=a(t),r=n.next().get(0);r&&"br"===r.tagName.toLowerCase()?(i=!0,n.remove()):i&&function(e,t){var n=2<arguments.length&&void 0!==arguments[2]&&arguments[2],r=t(e);if(n){for(var a=e.nextSibling,i=t("<p></p>");a&&(!a.tagName||!bi.test(a.tagName));){var o=a,s=o.nextSibling;t(a).appendTo(i),a=s}return r.replaceWith(i),r.remove()}}(t,a,!(i=!1))}),a}function Si(e){var r,a;return e=Ei(e),(r=e)("div").each(function(e,t){var n=r(t);0===n.children(mi).length&&Mi(n,r,"p")}),(a=e=r)("span").each(function(e,t){var n=a(t);0===n.parents("p, div").length&&Mi(n,a,"p")}),e=a}function Mi(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:"p",r=e.get(0);if(!r)return t;var a,i=ns(r)||{},o=si(i).map(function(e){return"".concat(e,"=").concat(i[e])}).join(" ");return a=t.browser?"noscript"===r.tagName.toLowerCase()?e.text():e.html():e.contents(),e.replaceWith("<".concat(n," ").concat(o,">").concat(a,"</").concat(n,">")),t}function Ti(e,s){return e.find("img").each(function(e,t){var n,r,a,i,o=s(t);r=ba((n=o).attr("height"),10),a=ba(n.attr("width"),10)||20,(r||20)<10||a<10?n.remove():r&&n.removeAttr("height"),i=o,ui.test(i.attr("src"))&&i.remove()}),s}var Ci=function(e){if(Ma(e)){for(var t=0,n=new Array(e.length);t<e.length;t++)n[t]=e[t];return n}},Di=function(e,t,n){t in e?j.f(e,t,A(0,n)):e[t]=n};L(L.S+L.F*!Dn(function(e){}),"Array",{from:function(e){var t,n,r,a,i=ct(e),o="function"==typeof this?this:Array,s=arguments.length,u=1<s?arguments[1]:void 0,c=void 0!==u,l=0,f=Vt(i);if(c&&(u=C(u,2<s?arguments[2]:void 0,2)),null==f||o==Array&&Ut(f))for(n=new o(t=ie(i.length));l<t;l++)Di(n,l,c?u(i[l],l):i[l]);else for(a=f.call(i),n=new o;!(r=a.next()).done;l++)Di(n,l,c?Ft(a,u,[r.value,l],!0):r.value);return n.length=l,n}});var Oi=M.Array.from,ji=V("iterator"),Ni=M.isIterable=function(e){var t=Object(e);return void 0!==t[ji]||"@@iterator"in t||vt.hasOwnProperty(It(t))};var zi=function(e){if(Ni(Object(e))||"[object Arguments]"===Object.prototype.toString.call(e))return Oi(e)};var Pi=function(){throw new TypeError("Invalid attempt to spread non-iterable instance")};var Li=function(e){return Ci(e)||zi(e)||Pi()};function Ri(e,t){return e.find("*").each(function(e,t){var n=ns(t);!function(t,n){if(t.attribs)t.attribs=n;else if(t.attributes){for(;0<t.attributes.length;)t.removeAttribute(t.attributes[0].name);si(n).forEach(function(e){t.setAttribute(e,n[e])})}}(t,si(n).reduce(function(e,t){return hi.test(t)?pt({},e,dt({},t,n[t])):e},{}))}),t(".".concat(ci),e).removeClass(ci),e}var Yi=new RegExp("^(".concat(["br","b","i","label","hr","area","base","basefont","input","img","link","meta"].join("|"),")$"),"i"),Wi=[[".hentry",".entry-content"],["entry",".entry-content"],[".entry",".entry_content"],[".post",".postbody"],[".post",".post_body"],[".post",".post-body"]],qi=new RegExp(["figure","photo","image","caption"].join("|"),"i"),Ii=new RegExp(["article","articlecontent","instapaper_body","blog","body","content","entry-content-asset","entry","hentry","main","Normal","page","pagination","permalink","post","story","text","[-_]copy","\\Bcopy"].join("|"),"i"),Hi=new RegExp("entry-content-asset","i"),Fi=new RegExp(["adbox","advert","author","bio","bookmark","bottom","byline","clear","com-","combx","comment","comment\\B","contact","copy","credit","crumb","date","deck","excerpt","featured","foot","footer","footnote","graf","head","info","infotext","instapaper_ignore","jump","linebreak","link","masthead","media","meta","modal","outbrain","promo","pr_","related","respond","roundcontent","scroll","secondary","share","shopping","shoutbox","side","sidebar","sponsor","stamp","sub","summary","tags","tools","widget"].join("|"),"i"),Bi=new RegExp("^(p|li|span|pre)$","i"),Gi=new RegExp("^(td|blockquote|ol|ul|dl)$","i"),Ui=new RegExp("^(address|form)$","i");function $i(e){var t=e.attr("class"),n=e.attr("id"),r=0;return n&&(Ii.test(n)&&(r+=25),Fi.test(n)&&(r-=25)),t&&(0===r&&(Ii.test(t)&&(r+=25),Fi.test(t)&&(r-=25)),qi.test(t)&&(r+=10),Hi.test(t)&&(r+=25)),r}var Vi=y.parseFloat,Ji=ma.trim,Ki=1/Vi(ca+"-0")!=-1/0?function(e){var t=Ji(String(e),3),n=Vi(t);return 0===n&&"-"==t.charAt(0)?-0:n}:Vi;L(L.G+L.F*(parseFloat!=Ki),{parseFloat:Ki});var Xi=M.parseFloat;function Zi(e){return Xi(e.attr("score"))||null}function Qi(e){return(e.match(/,/g)||[]).length}var eo=new RegExp("^(p|pre)$","i");function to(e){var t=1,n=e.text().trim(),r=n.length;return r<25?0:(t+=Qi(n),t+=function(e){var t,n=1<arguments.length&&void 0!==arguments[1]?arguments[1]:"p",r=e/50;return 0<r?(t=eo.test(n)?r-2:r-1.25,Math.min(Math.max(t,0),3)):0}(r),":"===n.slice(-1)&&(t-=1),t)}function no(e,t,n){return e.attr("score",n),e}function ro(e,t,n){try{no(e,0,ao(e,t)+n)}catch(e){}return e}function ao(e,t){var n,r,a,i=!(2<arguments.length&&void 0!==arguments[2])||arguments[2],o=Zi(e);return o||(o=io(e),i&&(o+=$i(e)),n=t,r=o,(a=e.parent())&&ro(a,n,.25*r),o)}function io(e){var t=e.get(0).tagName;return Bi.test(t)?to(e):"div"===t.toLowerCase()?5:Gi.test(t)?3:Ui.test(t)?-3:"th"===t.toLowerCase()?-5:0}function oo(e,t,n){var r,a;e&&(a=t,(r=e).get(0)&&"span"===r.get(0).tagName&&Mi(r,a,"div"),ro(e,t,n))}function so(i,o){return i("p, pre").not("[score]").each(function(e,t){var n=i(t),r=(n=no(n,0,ao(n,i,o))).parent(),a=io(n);oo(r,i,a),r&&oo(r.parent(),i,a/2)}),i}function uo(c,l,f){if(!c.parent().length)return c;var h=Math.max(10,.25*l),d=f("<div></div>");return c.parent().children().each(function(e,t){var n=f(t);if(Yi.test(t.tagName))return null;var r,a=Zi(n);if(a)if(n.get(0)===c.get(0))d.append(n);else{var i=0,o=$o(n);if(o<.05&&(i+=20),.5<=o&&(i-=20),n.attr("class")===c.attr("class")&&(i+=.2*l),h<=a+i)return d.append(n);if("p"===t.tagName){var s=n.text(),u=Uo(s);if(80<u&&o<.25)return d.append(n);if(u<=80&&0===o&&(r=s,za.test(r)))return d.append(n)}}return null}),1===d.children().length&&d.children().first().get(0)===c.get(0)?c:d}function co(e,a){return a(di,e).each(function(e,t){var n=a(t);if(!(n.hasClass(ci)||0<n.find(".".concat(ci)).length)){var r=Zi(n);r||no(n,0,r=ao(n,a)),r<0?n.remove():function(e,t,n){if(!e.hasClass("entry-content-asset")){var r=ua(e.text());if(Qi(r)<10){if(t("p",e).length/3<t("input",e).length)return e.remove();var a=r.length,i=t("img",e).length;if(a<25&&0===i)return e.remove();var o=$o(e);if(n<25&&.2<o&&75<a)return e.remove();if(25<=n&&.5<o){var s=e.get(0).tagName.toLowerCase();if("ol"===s||"ul"===s){var u=e.prev();if(u&&":"===ua(u.text()).slice(-1))return}return e.remove()}0<t("script",e).length&&a<150&&e.remove()}}}(n,a,r)}}),a}var lo,fo,ho,po,mo,go,vo,yo,_o,bo,wo,Ao,xo,ko,Eo,So,Mo,To,Co,Do,Oo,jo=function(e,t){if(!l(e)||e._t!==t)throw TypeError("Incompatible receiver, "+t+" required!");return e},No=j.f,zo=U.fastKey,Po=v?"_s":"size",Lo=function(e,t){var n,r=zo(t);if("F"!==r)return e._i[r];for(n=e._f;n;n=n.n)if(n.k==t)return n},Ro={getConstructor:function(e,i,n,r){var a=e(function(e,t){Ht(e,a,i,"_i"),e._t=i,e._i=ke(null),e._f=void 0,e._l=void 0,e[Po]=0,null!=t&&Jt(t,n,e[r],e)});return wn(a.prototype,{clear:function(){for(var e=jo(this,i),t=e._i,n=e._f;n;n=n.n)n.r=!0,n.p&&(n.p=n.p.n=void 0),delete t[n.i];e._f=e._l=void 0,e[Po]=0},delete:function(e){var t=jo(this,i),n=Lo(t,e);if(n){var r=n.n,a=n.p;delete t._i[n.i],n.r=!0,a&&(a.n=r),r&&(r.p=a),t._f==n&&(t._f=r),t._l==n&&(t._l=a),t[Po]--}return!!n},forEach:function(e){jo(this,i);for(var t,n=C(e,1<arguments.length?arguments[1]:void 0,3);t=t?t.n:this._f;)for(n(t.v,t.k,this);t&&t.r;)t=t.p},has:function(e){return!!Lo(jo(this,i),e)}}),v&&No(a.prototype,"size",{get:function(){return jo(this,i)[Po]}}),a},def:function(e,t,n){var r,a,i=Lo(e,t);return i?i.v=n:(e._l=i={i:a=zo(t,!0),k:t,v:n,p:r=e._l,n:void 0,r:!1},e._f||(e._f=i),r&&(r.n=i),e[Po]++,"F"!==a&&(e._i[a]=i)),e},getEntry:Lo,setStrong:function(e,n,t){Mt(e,n,function(e,t){this._t=jo(e,n),this._k=t,this._l=void 0},function(){for(var e=this._k,t=this._l;t&&t.r;)t=t.p;return this._t&&(this._l=t=t?t.n:this._t._f)?Ct(0,"keys"==e?t.k:"values"==e?t.v:[t.k,t.v]):(this._t=void 0,Ct(1))},t?"entries":"values",!t,!0),xn(n)}},Yo=V("species"),Wo=function(e,t){return ge(n=e)&&("function"!=typeof(r=n.constructor)||r!==Array&&!ge(r.prototype)||(r=void 0),l(r)&&null===(r=r[Yo])&&(r=void 0)),new(void 0===r?Array:r)(t);var n,r},qo=j.f,Io=(ho=1==(lo=0),po=2==lo,mo=3==lo,go=4==lo,vo=6==lo,yo=5==lo||vo,_o=fo||Wo,function(e,t,n){for(var r,a,i=ct(e),o=h(i),s=C(t,n,3),u=ie(o.length),c=0,l=ho?_o(e,u):po?_o(e,0):void 0;c<u;c++)if((yo||c in o)&&(a=s(r=o[c],c,i),lo))if(ho)l[c]=a;else if(a)switch(lo){case 3:return!0;case 5:return r;case 6:return c;case 2:l.push(r)}else if(go)return!1;return vo?-1:mo||go?go:l});wo=function(e){return function(){return e(this,0<arguments.length?arguments[0]:void 0)}},Ao={add:function(e){return Ro.def(jo(this,"Set"),e=0===e?0:e,e)}},xo=Ro,So=y[bo="Set"],To=ko?"set":"add",Co=(Mo=So)&&Mo.prototype,Do={},v&&"function"==typeof Mo&&(Eo||Co.forEach&&!g(function(){(new Mo).entries().next()}))?(Mo=wo(function(e,t){Ht(e,Mo,bo,"_c"),e._c=new So,null!=t&&Jt(t,ko,e[To],e)}),Io("add,clear,delete,forEach,get,has,set,keys,values,entries,toJSON".split(","),function(r){var a="add"==r||"set"==r;r in Co&&(!Eo||"clear"!=r)&&N(Mo.prototype,r,function(e,t){if(Ht(this,Mo,r),!a&&Eo&&!l(e))return"get"==r&&void 0;var n=this._c[r](0===e?0:e,t);return a?this:n})}),Eo||qo(Mo.prototype,"size",{get:function(){return this._c.size}})):(Mo=xo.getConstructor(wo,bo,ko,To),wn(Mo.prototype,Ao),U.NEED=!0),X(Mo,bo),Do[bo]=Mo,L(L.G+L.W+L.F,Do),Eo||xo.setStrong(Mo,bo,ko);L(L.P+L.R,"Set",{toJSON:(Oo="Set",function(){if(It(this)!=Oo)throw TypeError(Oo+"#toJSON isn't generic");return Jt(this,!(t=[]),t.push,t,e),t;var e,t})});var Ho;Ho="Set",L(L.S,Ho,{of:function(){for(var e=arguments.length,t=new Array(e);e--;)t[e]=arguments[e];return new this(t)}});var Fo;Fo="Set",L(L.S,Fo,{from:function(e){var t,n,r,a,i=arguments[1];return T(this),(t=void 0!==i)&&T(i),null==e?new this:(n=[],t?(r=0,a=C(i,arguments[2],2),Jt(e,!1,function(e){n.push(a(e,r++))})):Jt(e,!1,n.push,n),new this(n))}});var Bo=M.Set;function Go(e,n,r){var i;return["href","src"].forEach(function(e){return a=r,i=e,o=(t=n)("base").attr("href"),void t("[".concat(i,"]")).each(function(e,t){var n=ns(t)[i];if(n){var r=Mr.resolve(o||a,n);rs(t,i,r)}});var t,a,i,o}),i=r,n("[srcset]",e).each(function(e,t){var n=ns(t).srcset;if(n){var r=n.match(/(?:\s*)(\S+(?:\s*[\d.]+[wx])?)(?:\s*,\s*)?/g);if(!r)return;var a=r.map(function(e){var t=e.trim().replace(/,$/,"").split(/\s+/);return t[0]=Mr.resolve(i,t[0]),t.join(" ")});rs(t,"srcset",Li(new Bo(a)).join(", "))}}),e}function Uo(e){return e.trim().replace(/\s+/g," ").length}function $o(e){var t=Uo(e.text()),n=Uo(e.find("a").text());return 0<t?n/t:0===t&&0<n?1:0}var Vo=Z.f("iterator");ee("asyncIterator"),ee("observable");var Jo=M.Symbol,Ko=e(function(t){function n(e){return(n="function"==typeof Jo&&"symbol"==typeof Vo?function(e){return typeof e}:function(e){return e&&"function"==typeof Jo&&e.constructor===Jo&&e!==Jo.prototype?"symbol":typeof e})(e)}function r(e){return"function"==typeof Jo&&"symbol"===n(Vo)?t.exports=r=function(e){return n(e)}:t.exports=r=function(e){return e&&"function"==typeof Jo&&e.constructor===Jo&&e!==Jo.prototype?"symbol":n(e)},r(e)}t.exports=r});function Xo(r,e,t){var a=!(3<arguments.length&&void 0!==arguments[3])||arguments[3],n=e.filter(function(e){return-1!==t.indexOf(e)}),i=!0,o=!1,s=void 0;try{for(var u,c=function(){var e=u.value,t=r("meta[".concat("name",'="').concat(e,'"]')).map(function(e,t){return r(t).attr("value")}).toArray().filter(function(e){return""!==e});if(1===t.length){var n;if(a)n=es(t[0],r);else n=ja(t,1)[0];return{v:n}}},l=Ca(n);!(i=(u=l.next()).done);i=!0){var f=c();if("object"===Ko(f))return f.v}}catch(e){o=!0,s=e}finally{try{i||null==l.return||l.return()}finally{if(o)throw s}}return null}function Zo(e,t){return!(e.children().length>t)&&void 0===e.parents().toArray().find(function(e){var t=ns(e),n=t.class,r=t.id,a="".concat(n," ").concat(r);return a.includes("comment")})}function Qo(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:1,r=!(3<arguments.length&&void 0!==arguments[3])||arguments[3],a=!0,i=!1,o=void 0;try{for(var s,u=Ca(t);!(a=(s=u.next()).done);a=!0){var c=e(s.value);if(1===c.length){var l=e(c[0]);if(Zo(l,n)){var f=void 0;if(f=r?l.text():l.html())return f}}}}catch(e){i=!0,o=e}finally{try{a||null==u.return||u.return()}finally{if(i)throw o}}return null}function es(e,t){var n=t("<span>".concat(e,"</span>")).text();return""===n?e:n}function ts(e){return 100<=e.text().trim().length}function ns(e){var t=e.attribs,r=e.attributes;return t||!r?t:si(r).reduce(function(e,t){var n=r[t];return n.name&&n.value&&(e[n.name]=n.value),e},{})}function rs(e,t,n){return e.attribs?e.attribs[t]=n:e.attributes&&e.setAttribute(t,n),e}var as=new RegExp("https?://","i"),is=".(png|gif|jpe?g)",os=new RegExp("".concat(is),"i"),ss=new RegExp("".concat(is,"(\\?\\S+)?(\\s*[\\d.]+[wx])"),"i"),us=["script","style","form"].join(",");function cs(e,t){return"comment"===t.type}function ls(e){var t;return e(us).remove(),(t=e).root().find("*").contents().filter(cs).remove(),e=t}var fs,hs={create:(fs=Qn(S.mark(function e(t,n,r){var a,i,o=arguments;return S.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(a=3<o.length&&void 0!==o[3]?o[3]:{},!n){e.next=6;break}i={body:n,response:{statusMessage:"OK",statusCode:200,headers:{"content-type":"text/html","content-length":500}}},e.next=9;break;case 6:return e.next=8,ni(t,r,a);case 8:i=e.sent;case 9:if(i.error)return i.failed=!0,e.abrupt("return",i);e.next=12;break;case 12:return e.abrupt("return",this.generateDoc(i));case 13:case"end":return e.stop()}},e,this)})),function(e,t,n){return fs.apply(this,arguments)}),generateDoc:function(e){var t=e.body,n=e.response.headers["content-type"],r=void 0===n?"":n;if(!r.includes("html")&&!r.includes("text"))throw new Error("Content does not appear to be text.");var a,i=this.encodeDoc({content:t,contentType:r});if(0===i.root().children().length)throw new Error("No children, likely a bad parse.");return i=ai(ai(i,"content","value"),"property","name"),(a=i)("img").each(function(e,n){var r=ns(n);si(r).forEach(function(e){var t=r[e];"srcset"!==e&&as.test(t)&&ss.test(t)?a(n).attr("srcset",t):"src"!==e&&"srcset"!==e&&as.test(t)&&os.test(t)&&a(n).attr("src",t)})}),i=ls(i=a)},encodeDoc:function(e){var t=e.content,n=La(e.contentType),r=oa(t,n),a=Cr.load(r),i=a(Cr.browser?"meta[http-equiv=content-type]":"meta[http-equiv=content-type i]").attr("content")||a("meta[charset]").attr("charset"),o=La(i);return i&&o!==n&&(r=oa(t,o),a=Cr.load(r)),a}},ds=S.mark(ps);function ps(){var t,n,r=arguments;return S.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:t=0<r.length&&void 0!==r[0]?r[0]:1,n=1<r.length&&void 0!==r[1]?r[1]:1;case 2:if(t<=n)return e.next=5,t+=1;e.next=7;break;case 5:e.next=2;break;case 7:case"end":return e.stop()}},ds,this)}var ms=Object.assign,gs=!ms||g(function(){var e={},t={},n=Symbol(),r="abcdefghijklmnopqrst";return e[n]=7,r.split("").forEach(function(e){t[e]=e}),7!=ms({},e)[n]||Object.keys(ms({},t)).join("")!=r})?function(e,t){for(var n=ct(e),r=arguments.length,a=1,i=me.f,o=d.f;a<r;)for(var s,u=h(arguments[a++]),c=i?pe(u).concat(i(u)):pe(u),l=c.length,f=0;f<l;)o.call(u,s=c[f++])&&(n[s]=u[s]);return n}:ms;L(L.S+L.F,"Object",{assign:gs});var vs=M.Object.assign,ys=function(n,e){return e.reduce(function(e,t){return e[t]=n,e},{})};function _s(e){return e.supportedDomains?ys(e,[e.domain].concat(Li(e.supportedDomains))):ys(e,[e.domain])}var bs={};function ws(e){return e&&e.domain?(vs(bs,_s(e)),bs):{error:!0,message:"Unable to add custom extractor. Invalid parameters."}}var As={domain:"blogspot.com",content:{selectors:[".post-content noscript"],clean:[],transforms:{noscript:"div"}},author:{selectors:[".post-author-name"]},title:{selectors:[".post h2.title"]},date_published:{selectors:["span.publishdate"]}},xs={domain:"nymag.com",content:{selectors:["div.article-content","section.body","article.article"],clean:[".ad",".single-related-story"],transforms:{h1:"h2",noscript:function(e,t){var n=t.browser?t(e.text()):e.children();return 1===n.length&&void 0!==n.get(0)&&"img"===n.get(0).tagName.toLowerCase()?"figure":null}}},title:{selectors:["h1.lede-feature-title","h1.headline-primary","h1"]},author:{selectors:[".by-authors",".lede-feature-author"]},dek:{selectors:[".lede-feature-teaser"]},date_published:{selectors:[["time.article-timestamp[datetime]","datetime"],"time.article-timestamp"]}},ks={domain:"www.apartmenttherapy.com",title:{selectors:["h1.headline"]},author:{selectors:[".PostByline__name"]},content:{selectors:["div.post__content"],transforms:{'div[data-render-react-id="images/LazyPicture"]':function(e,t){var n=JSON.parse(e.attr("data-props")).sources[0].src,r=t("<img />").attr("src",n);e.replaceWith(r)}},clean:[]},date_published:{selectors:[[".PostByline__timestamp[datetime]","datetime"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:{selectors:[]},excerpt:{selectors:[]}},Es={domain:"medium.com",title:{selectors:["h1",['meta[name="og:title"]',"value"]]},author:{selectors:[['meta[name="author"]',"value"]]},content:{selectors:["article"],transforms:{iframe:function(e){var t=/https:\/\/i.embed.ly\/.+url=https:\/\/i\.ytimg\.com\/vi\/(\w+)\//,n=decodeURIComponent(e.attr("data-thumbnail")),r=e.parents("figure");if(t.test(n)){var a=n.match(t),i=ja(a,2),o=(i[0],i[1]);e.attr("src","https://www.youtube.com/embed/".concat(o));var s=r.find("figcaption");r.empty().append([e,s])}else r.remove()},figure:function(e){if(!(0<e.find("iframe").length)){var t=e.find("img").slice(-1)[0],n=e.find("figcaption");e.empty().append([t,n])}},img:function(e){ba(e.attr("width"),10)<100&&e.remove()}},clean:["span","svg"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:null,next_page_url:{selectors:[]},excerpt:{selectors:[]}},Ss={domain:"www.msnbc.com",title:{selectors:["h1","h1.is-title-pane"]},author:{selectors:[".author"]},date_published:{selectors:[['meta[name="DC.date.issued"]',"value"]]},dek:{selectors:[['meta[name="description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".pane-node-body"],transforms:{".pane-node-body":function(e,t){var n=ja(Ss.lead_image_url.selectors[0],2),r=n[0],a=n[1],i=t(r).attr(a);i&&e.prepend('<img src="'.concat(i,'" />'))}},clean:[]}},Ms={domain:"genius.com",title:{selectors:["h1"]},author:{selectors:["h2 a"]},date_published:{selectors:[["meta[itemprop=page_data]","value",function(e){return JSON.parse(e).song.release_date}]]},dek:{selectors:[]},lead_image_url:{selectors:[["meta[itemprop=page_data]","value",function(e){return JSON.parse(e).song.album.cover_art_url}]]},content:{selectors:[".lyrics"],transforms:{},clean:[]}},Ts={domain:"wired.jp",title:{selectors:["h1.post-title"]},author:{selectors:['p[itemprop="author"]']},date_published:{selectors:[["time","datetime"]]},dek:{selectors:[".post-intro"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["article.article-detail"],transforms:{"img[data-original]":function(e){var t=e.attr("data-original"),n=e.attr("src"),r=Mr.resolve(n,t);e.attr("src",r)}},clean:[".post-category","time","h1.post-title",".social-area-syncer"]}},Cs=Object.freeze({BloggerExtractor:As,NYMagExtractor:xs,WikipediaExtractor:{domain:"wikipedia.org",content:{selectors:["#mw-content-text"],defaultCleaner:!1,transforms:{".infobox img":function(e){var t=e.parents(".infobox");0===t.children("img").length&&t.prepend(e)},".infobox caption":"figcaption",".infobox":"figure"},clean:[".mw-editsection","figure tr, figure td, figure tbody","#toc",".navbox"]},author:"Wikipedia Contributors",title:{selectors:["h2.title"]},date_published:{selectors:["#footer-info-lastmod"]}},TwitterExtractor:{domain:"twitter.com",content:{transforms:{".permalink[role=main]":function(e,t){var n=e.find(".tweet"),r=t('<div id="TWEETS_GO_HERE"></div>');r.append(n),e.replaceWith(r)},s:"span"},selectors:[".permalink[role=main]"],defaultCleaner:!1,clean:[".stream-item-footer","button",".tweet-details-fixer"]},author:{selectors:[".tweet.permalink-tweet .username"]},date_published:{selectors:[[".permalink-tweet ._timestamp[data-time-ms]","data-time-ms"]]}},NYTimesExtractor:{domain:"www.nytimes.com",title:{selectors:["h1.g-headline",'h1[itemprop="headline"]',"h1.headline"]},author:{selectors:[['meta[name="author"]',"value"],".g-byline",".byline"]},content:{selectors:["div.g-blocks","article#story"],transforms:{"img.g-lazy":function(e){var t=e.attr("src");t=t.replace("{{size}}",640),e.attr("src",t)}},clean:[".ad","header#story-header",".story-body-1 .lede.video",".visually-hidden","#newsletter-promo",".promo",".comments-button",".hidden",".comments",".supplemental",".nocontent",".story-footer-links"]},date_published:{selectors:[['meta[name="article:published"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:null,next_page_url:null,excerpt:null},TheAtlanticExtractor:{domain:"www.theatlantic.com",title:{selectors:["h1",".c-article-header__hed"]},author:{selectors:[['meta[name="author"]',"value"],".c-byline__author"]},content:{selectors:["article",".article-body"],transforms:[],clean:[".partner-box",".callout",".c-article-writer__image",".c-article-writer__content",".c-letters-cta__text",".c-footer__logo",".c-recirculation-link",".twitter-tweet"]},dek:{selectors:[['meta[name="description"]',"value"]]},date_published:{selectors:[['time[itemprop="datePublished"]',"datetime"]]},lead_image_url:{selectors:[['img[itemprop="url"]',"src"]]},next_page_url:null,excerpt:null},NewYorkerExtractor:{domain:"www.newyorker.com",title:{selectors:['h1[class^="ArticleHeader__hed"]',['meta[name="og:title"]',"value"]]},author:{selectors:['div[class^="ArticleContributors"] a[rel="author"]','article header div[class*="Byline__multipleContributors"]']},content:{selectors:['main[class^="Layout__content"]'],transforms:[],clean:['footer[class^="ArticleFooter__footer"]']},date_published:{selectors:[['meta[name="pubdate"]',"value"]],format:"YYYYMMDD",timezone:"America/New_York"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:['h2[class^="ArticleHeader__dek"]']},next_page_url:null,excerpt:null},WiredExtractor:{domain:"www.wired.com",title:{selectors:["h1.post-title"]},author:{selectors:['a[rel="author"]']},content:{selectors:["article.content"],transforms:[],clean:[".visually-hidden","figcaption img.photo"]},date_published:{selectors:[['meta[itemprop="datePublished"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:null,excerpt:null},MSNExtractor:{domain:"www.msn.com",title:{selectors:["h1"]},author:{selectors:["span.authorname-txt"]},content:{selectors:["div.richtext"],transforms:[],clean:["span.caption"]},date_published:{selectors:["span.time"]},lead_image_url:{selectors:[]},dek:{selectors:[]},next_page_url:null,excerpt:null},YahooExtractor:{domain:"www.yahoo.com",title:{selectors:["header.canvas-header"]},author:{selectors:["span.provider-name"]},content:{selectors:[".content-canvas"],transforms:[],clean:[".figure-caption"]},date_published:{selectors:[["time.date[datetime]","datetime"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:null,excerpt:null},BuzzfeedExtractor:{domain:"www.buzzfeed.com",title:{selectors:['h1[id="post-title"]']},author:{selectors:['a[data-action="user/username"]',"byline__author"]},content:{selectors:[[".longform_custom_header_media","#buzz_sub_buzz"],"#buzz_sub_buzz"],defaultCleaner:!1,transforms:{h2:"b","div.longform_custom_header_media":function(e){return e.has("img")&&e.has(".longform_header_image_source")?"figure":null},"figure.longform_custom_header_media .longform_header_image_source":"figcaption"},clean:[".instapaper_ignore",".suplist_list_hide .buzz_superlist_item .buzz_superlist_number_inline",".share-box",".print"]},date_published:{selectors:[".buzz-datetime"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:null,excerpt:null},WikiaExtractor:{domain:"fandom.wikia.com",title:{selectors:["h1.entry-title"]},author:{selectors:[".author vcard",".fn"]},content:{selectors:[".grid-content",".entry-content"],transforms:[],clean:[]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:null,excerpt:null},LittleThingsExtractor:{domain:"www.littlethings.com",title:{selectors:["h1.post-title"]},author:{selectors:[['meta[name="author"]',"value"]]},content:{selectors:[".mainContentIntro",".content-wrapper"],transforms:[],clean:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},next_page_url:null,excerpt:null},PoliticoExtractor:{domain:"www.politico.com",title:{selectors:[['meta[name="og:title"]',"value"]]},author:{selectors:[".story-main-content .byline .vcard"]},content:{selectors:[".story-main-content",".content-group",".story-core",".story-text"],transforms:[],clean:["figcaption"]},date_published:{selectors:[[".story-main-content .timestamp time[datetime]","datetime"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:null,excerpt:null},DeadspinExtractor:{domain:"deadspin.com",supportedDomains:["jezebel.com","lifehacker.com","kotaku.com","gizmodo.com","jalopnik.com","kinja.com","avclub.com","clickhole.com","splinternews.com","theonion.com","theroot.com","thetakeout.com","theinventory.com"],title:{selectors:["h1.headline"]},author:{selectors:[".author"]},content:{selectors:[".post-content",".entry-content"],transforms:{'iframe.lazyload[data-recommend-id^="youtube://"]':function(e){var t=e.attr("id").split("youtube-")[1];e.attr("src","https://www.youtube.com/embed/".concat(t))}},clean:[".magnifier",".lightbox"]},date_published:{selectors:[["time.updated[datetime]","datetime"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:{selectors:[]},excerpt:{selectors:[]}},BroadwayWorldExtractor:{domain:"www.broadwayworld.com",title:{selectors:["h1.article-title"]},author:{selectors:["span[itemprop=author]"]},content:{selectors:["div[itemprop=articlebody]"],transforms:{},clean:[]},date_published:{selectors:[["meta[itemprop=datePublished]","value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:{selectors:[]},excerpt:{selectors:[]}},ApartmentTherapyExtractor:ks,MediumExtractor:Es,WwwTmzComExtractor:{domain:"www.tmz.com",title:{selectors:[".post-title-breadcrumb","h1",".headline"]},author:"TMZ STAFF",date_published:{selectors:[".article-posted-date"],timezone:"America/Los_Angeles"},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article-content",".all-post-body"],transforms:{},clean:[".lightbox-link"]}},WwwWashingtonpostComExtractor:{domain:"www.washingtonpost.com",title:{selectors:["h1","#topper-headline-wrapper"]},author:{selectors:[".pb-author-name"]},date_published:{selectors:[['.author-timestamp[itemprop="datePublished"]',"content"]]},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article-body"],transforms:{"div.inline-content":function(e){return 0<e.has("img,iframe,video").length?"figure":(e.remove(),null)},".pb-caption":"figcaption"},clean:[".interstitial-link",".newsletter-inline-unit"]}},WwwHuffingtonpostComExtractor:{domain:"www.huffingtonpost.com",title:{selectors:["h1.headline__title"]},author:{selectors:["span.author-card__details__name"]},date_published:{selectors:[['meta[name="article:modified_time"]',"value"],['meta[name="article:published_time"]',"value"]]},dek:{selectors:["h2.headline__subtitle"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.entry__body"],defaultCleaner:!1,transforms:{},clean:[".pull-quote",".tag-cloud",".embed-asset",".below-entry",".entry-corrections","#suggested-story"]}},NewrepublicComExtractor:{domain:"newrepublic.com",title:{selectors:["h1.article-headline",".minutes-primary h1.minute-title"]},author:{selectors:["div.author-list",".minutes-primary h3.minute-byline"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]],timezone:"America/New_York"},dek:{selectors:["h2.article-subhead"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".article-cover","div.content-body"],[".minute-image",".minutes-primary div.content-body"]],transforms:{},clean:["aside"]}},MoneyCnnComExtractor:{domain:"money.cnn.com",title:{selectors:[".article-title"]},author:{selectors:[".byline a"]},date_published:{selectors:[['meta[name="date"]',"value"]],timezone:"GMT"},dek:{selectors:["#storytext h2"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#storytext"],transforms:{},clean:[".inStoryHeading"]}},WwwThevergeComExtractor:{domain:"www.theverge.com",supportedDomains:["www.polygon.com"],title:{selectors:["h1"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:["h2.p-dek"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".c-entry-hero .e-image",".c-entry-intro",".c-entry-content"],[".e-image--hero",".c-entry-content"],".l-wrapper .l-feature","div.c-entry-content"],transforms:{noscript:function(e){var t=e.children();return 1===t.length&&"img"===t.get(0).tagName?"span":null}},clean:[".aside","img.c-dynamic-image"]}},WwwCnnComExtractor:{domain:"www.cnn.com",title:{selectors:["h1.pg-headline","h1"]},author:{selectors:[".metadata__byline__author"]},date_published:{selectors:[['meta[name="pubdate"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".media__video--thumbnail",".zn-body-text"],".zn-body-text",'div[itemprop="articleBody"]'],transforms:{".zn-body__paragraph, .el__leafmedia--sourced-paragraph":function(e){return e.html()?"p":null},".zn-body__paragraph":function(e){e.has("a")&&e.text().trim()===e.find("a").text().trim()&&e.remove()},".media__video--thumbnail":"figure"},clean:[]}},WwwAolComExtractor:{domain:"www.aol.com",title:{selectors:["h1.p-article__title"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[".p-article__byline__date"],timezone:"America/New_York"},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article-content"],transforms:{},clean:[]}},WwwYoutubeComExtractor:{domain:"www.youtube.com",title:{selectors:[".watch-title","h1.watch-title-container"]},author:{selectors:[".yt-user-info"]},date_published:{selectors:[['meta[itemProp="datePublished"]',"value"]],timezone:"GMT"},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{defaultCleaner:!1,selectors:[["#player-api","#eow-description"]],transforms:{"#player-api":function(e,t){var n=t('meta[itemProp="videoId"]').attr("value");e.html('\n          <iframe src="https://www.youtube.com/embed/'.concat(n,'" frameborder="0" allowfullscreen></iframe>'))}},clean:[]}},WwwTheguardianComExtractor:{domain:"www.theguardian.com",title:{selectors:[".content__headline"]},author:{selectors:["p.byline"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[".content__standfirst"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".content__article-body"],transforms:{},clean:[".hide-on-mobile",".inline-icon"]}},WwwSbnationComExtractor:{domain:"www.sbnation.com",title:{selectors:["h1.c-page-title"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:["h2.c-entry-summary.p-dek"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.c-entry-content"],transforms:{},clean:[]}},WwwBloombergComExtractor:{domain:"www.bloomberg.com",title:{selectors:[".lede-headline","h1.article-title","h1.lede-text-only__hed"]},author:{selectors:[['meta[name="parsely-author"]',"value"],".byline-details__link",".bydek",".author"]},date_published:{selectors:[["time.published-at","datetime"],["time[datetime]","datetime"],['meta[name="date"]',"value"],['meta[name="parsely-pub-date"]',"value"]]},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article-body__content",["section.copy-block"],".body-copy"],transforms:{},clean:[".inline-newsletter",".page-ad"]}},WwwBustleComExtractor:{domain:"www.bustle.com",title:{selectors:["h1.post-page__title"]},author:{selectors:["div.content-meta__author"]},date_published:{selectors:[["time.content-meta__published-date[datetime]","datetime"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".post-page__body"],transforms:{},clean:[]}},WwwNprOrgExtractor:{domain:"www.npr.org",title:{selectors:["h1",".storytitle"]},author:{selectors:["p.byline__name.byline__name--block"]},date_published:{selectors:[[".dateblock time[datetime]","datetime"],['meta[name="date"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"],['meta[name="twitter:image:src"]',"value"]]},content:{selectors:[".storytext"],transforms:{".bucketwrap.image":"figure",".bucketwrap.image .credit-caption":"figcaption"},clean:["div.enlarge_measure"]}},WwwRecodeNetExtractor:{domain:"www.recode.net",title:{selectors:["h1.c-page-title"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:["h2.c-entry-summary.p-dek"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["figure.e-image--hero",".c-entry-content"],".c-entry-content"],transforms:{},clean:[]}},QzComExtractor:{domain:"qz.com",title:{selectors:["header.item-header.content-width-responsive"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[".timestamp"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["figure.featured-image",".item-body"],".item-body"],transforms:{},clean:[".article-aside",".progressive-image-thumbnail"]}},WwwDmagazineComExtractor:{domain:"www.dmagazine.com",title:{selectors:["h1.story__title"]},author:{selectors:[".story__info .story__info__item:first-child"]},date_published:{selectors:[".story__info"],timezone:"America/Chicago"},dek:{selectors:[".story__subhead"]},lead_image_url:{selectors:[["article figure a:first-child","href"]]},content:{selectors:[".story__content"],transforms:{},clean:[]}},WwwReutersComExtractor:{domain:"www.reuters.com",title:{selectors:["h1.article-headline"]},author:{selectors:[".author"]},date_published:{selectors:[['meta[name="og:article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#article-text"],transforms:{".article-subtitle":"h4"},clean:["#article-byline .author"]}},MashableComExtractor:{domain:"mashable.com",title:{selectors:["h1.title"]},author:{selectors:["span.author_name a"]},date_published:{selectors:[['meta[name="og:article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["section.article-content.blueprint"],transforms:{".image-credit":"figcaption"},clean:[]}},WwwChicagotribuneComExtractor:{domain:"www.chicagotribune.com",title:{selectors:["h1.trb_ar_hl_t"]},author:{selectors:["span.trb_ar_by_nm_au"]},date_published:{selectors:[['meta[itemprop="datePublished"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.trb_ar_page"],transforms:{},clean:[]}},WwwVoxComExtractor:{domain:"www.vox.com",title:{selectors:["h1.c-page-title"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[".p-dek"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["figure.e-image--hero",".c-entry-content"],".c-entry-content"],transforms:{"figure .e-image__image noscript":function(e){var t=e.html();e.parents(".e-image__image").find(".c-dynamic-image").replaceWith(t)},"figure .e-image__meta":"figcaption"},clean:[]}},NewsNationalgeographicComExtractor:{domain:"news.nationalgeographic.com",title:{selectors:["h1","h1.main-title"]},author:{selectors:[".byline-component__contributors b span"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]],format:"ddd MMM DD HH:mm:ss zz YYYY",timezone:"EST"},dek:{selectors:[".article__deck"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".parsys.content",".__image-lead__"],".content"],transforms:{".parsys.content":function(e,t){var n=e.find(".image.parbase.section").find(".picturefill").first().data("platform-src");n&&e.prepend(t('<img class="__image-lead__" src="'.concat(n,'"/>')))}},clean:[".pull-quote.pull-quote--large"]}},WwwNationalgeographicComExtractor:{domain:"www.nationalgeographic.com",title:{selectors:["h1","h1.main-title"]},author:{selectors:[".byline-component__contributors b span"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[".article__deck"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".parsys.content",".__image-lead__"],".content"],transforms:{".parsys.content":function(e,t){var n=e.children().first();if(n.hasClass("imageGroup")){var r=n.find(".media--medium__container").children().first(),a=r.data("platform-image1-path"),i=r.data("platform-image2-path");i&&a&&e.prepend(t('<div class="__image-lead__">\n                <img src="'.concat(a,'"/>\n                <img src="').concat(i,'"/>\n              </div>')))}else{var o=e.find(".image.parbase.section").find(".picturefill").first().data("platform-src");o&&e.prepend(t('<img class="__image-lead__" src="'.concat(o,'"/>')))}}},clean:[".pull-quote.pull-quote--small"]}},WwwLatimesComExtractor:{domain:"www.latimes.com",title:{selectors:[".trb_ar_hl"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[itemprop="datePublished"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".trb_ar_main"],transforms:{".trb_ar_la":function(e){var t=e.find("figure");e.replaceWith(t)}},clean:[".trb_ar_by",".trb_ar_cr"]}},PagesixComExtractor:{domain:"pagesix.com",supportedDomains:["nypost.com"],title:{selectors:["h1 a"]},author:{selectors:[".byline"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[['meta[name="description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["#featured-image-wrapper",".entry-content"],".entry-content"],transforms:{"#featured-image-wrapper":"figure",".wp-caption-text":"figcaption"},clean:[".modal-trigger"]}},ThefederalistpapersOrgExtractor:{domain:"thefederalistpapers.org",title:{selectors:["h1.entry-title"]},author:{selectors:["main span.entry-author-name"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".entry-content"],transforms:{},clean:[["p[style]"]]}},WwwCbssportsComExtractor:{domain:"www.cbssports.com",title:{selectors:[".article-headline"]},author:{selectors:[".author-name"]},date_published:{selectors:[[".date-original-reading-time time","datetime"]],timezone:"UTC"},dek:{selectors:[".article-subline"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article"],transforms:{},clean:[]}},WwwMsnbcComExtractor:Ss,WwwThepoliticalinsiderComExtractor:{domain:"www.thepoliticalinsider.com",title:{selectors:[['meta[name="sailthru.title"]',"value"]]},author:{selectors:[['meta[name="sailthru.author"]',"value"]]},date_published:{selectors:[['meta[name="sailthru.date"]',"value"]],timezone:"America/New_York"},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div#article-body"],transforms:{},clean:[]}},WwwMentalflossComExtractor:{domain:"www.mentalfloss.com",title:{selectors:["h1.title",".title-group",".inner"]},author:{selectors:[".field-name-field-enhanced-authors"]},date_published:{selectors:[".date-display-single"],timezone:"America/New_York"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.field.field-name-body"],transforms:{},clean:[]}},AbcnewsGoComExtractor:{domain:"abcnews.go.com",title:{selectors:[".article-header h1"]},author:{selectors:[".authors"],clean:[".author-overlay",".by-text"]},date_published:{selectors:[".timestamp"],timezone:"America/New_York"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article-copy"],transforms:{},clean:[]}},WwwNydailynewsComExtractor:{domain:"www.nydailynews.com",title:{selectors:["h1#ra-headline"]},author:{selectors:[['meta[name="parsely-author"]',"value"]]},date_published:{selectors:[['meta[name="sailthru.date"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["article#ra-body"],transforms:{},clean:["dl#ra-tags",".ra-related","a.ra-editor","dl#ra-share-bottom"]}},WwwCnbcComExtractor:{domain:"www.cnbc.com",title:{selectors:["h1.title","h1.ArticleHeader-headline"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div#article_body.content","div.story","div.ArticleBody-articleBody"],transforms:{},clean:[]}},WwwPopsugarComExtractor:{domain:"www.popsugar.com",title:{selectors:["h2.post-title","title-text"]},author:{selectors:[['meta[name="article:author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#content"],transforms:{},clean:[".share-copy-title",".post-tags",".reactions"]}},ObserverComExtractor:{domain:"observer.com",title:{selectors:["h1.entry-title"]},author:{selectors:[".author",".vcard"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:["h2.dek"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.entry-content"],transforms:{},clean:[]}},PeopleComExtractor:{domain:"people.com",title:{selectors:[['meta[name="og:title"]',"value"]]},author:{selectors:["a.author.url.fn"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.article-body__inner"],transforms:{},clean:[]}},WwwUsmagazineComExtractor:{domain:"www.usmagazine.com",title:{selectors:["header h1"]},author:{selectors:["a.article-byline.tracked-offpage"]},date_published:{timezone:"America/New_York",selectors:["time.article-published-date"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.article-body-inner"],transforms:{},clean:[".module-related"]}},WwwRollingstoneComExtractor:{domain:"www.rollingstone.com",title:{selectors:["h1.content-title"]},author:{selectors:["a.content-author.tracked-offpage"]},date_published:{selectors:["time.content-published-date"],timezone:"America/New_York"},dek:{selectors:[".content-description"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".lead-container",".article-content"],".article-content"],transforms:{},clean:[".module-related"]}},twofortysevensportsComExtractor:{domain:"247sports.com",title:{selectors:["title","article header h1"]},author:{selectors:[".author"]},date_published:{selectors:[["time[data-published]","data-published"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["section.body.article"],transforms:{},clean:[]}},UproxxComExtractor:{domain:"uproxx.com",title:{selectors:["div.post-top h1"]},author:{selectors:[".post-top .authorname"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".post-body"],transforms:{"div.image":"figure","div.image .wp-media-credit":"figcaption"},clean:[]}},WwwEonlineComExtractor:{domain:"www.eonline.com",title:{selectors:["h1.article__title"]},author:{selectors:[".entry-meta__author a"]},date_published:{selectors:[['meta[itemprop="datePublished"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".post-content section, .post-content div.post-content__image"]],transforms:{"div.post-content__image":"figure","div.post-content__image .image__credits":"figcaption"},clean:[]}},WwwMiamiheraldComExtractor:{domain:"www.miamiherald.com",title:{selectors:["h1.title"]},date_published:{selectors:["p.published-date"],timezone:"America/New_York"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.dateline-storybody"],transforms:{},clean:[]}},WwwRefinery29ComExtractor:{domain:"www.refinery29.com",title:{selectors:["h1.title"]},author:{selectors:[".contributor"]},date_published:{selectors:[['meta[name="sailthru.date"]',"value"]],timezone:"America/New_York"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".full-width-opener",".article-content"],".article-content",".body"],transforms:{"div.loading noscript":function(e){var t=e.html();e.parents(".loading").replaceWith(t)},".section-image":"figure",".section-image .content-caption":"figcaption",".section-text":"p"},clean:[".story-share"]}},WwwMacrumorsComExtractor:{domain:"www.macrumors.com",title:{selectors:["h1","h1.title"]},author:{selectors:[".author-url"]},date_published:{selectors:[".article .byline"],format:"dddd MMMM D, YYYY h:mm A zz",timezone:"America/Los_Angeles"},dek:{selectors:[['meta[name="description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article"],transforms:{},clean:[]}},WwwAndroidcentralComExtractor:{domain:"www.androidcentral.com",title:{selectors:["h1","h1.main-title"]},author:{selectors:[".meta-by"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[['meta[name="og:description"]',"value"]]},lead_image_url:{selectors:[[".image-large","src"]]},content:{selectors:[".article-body"],transforms:{},clean:[".intro","blockquote"]}},WwwSiComExtractor:{domain:"www.si.com",title:{selectors:["h1","h1.headline"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[".timestamp"],timezone:"America/New_York"},dek:{selectors:[".quick-hit ul"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["p",".marquee_large_2x",".component.image"]],transforms:{noscript:function(e){var t=e.children();return 1===t.length&&"img"===t.get(0).tagName?"figure":null}},clean:[[".inline-thumb",".primary-message",".description",".instructions"]]}},WwwRawstoryComExtractor:{domain:"www.rawstory.com",title:{selectors:[".blog-title"]},author:{selectors:[".blog-author a:first-of-type"]},date_published:{selectors:[".blog-author a:last-of-type"],timezone:"EST"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".blog-content"],transforms:{},clean:[]}},WwwCnetComExtractor:{domain:"www.cnet.com",title:{selectors:[['meta[name="og:title"]',"value"]]},author:{selectors:["a.author"]},date_published:{selectors:["time"],timezone:"America/Los_Angeles"},dek:{selectors:[".article-dek"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["img.__image-lead__",".article-main-body"],".article-main-body"],transforms:{"figure.image":function(e){var t=e.find("img");t.attr("width","100%"),t.attr("height","100%"),t.addClass("__image-lead__"),e.remove(".imgContainer").prepend(t)}},clean:[]}},WwwCinemablendComExtractor:{domain:"www.cinemablend.com",title:{selectors:[".story_title"]},author:{selectors:[".author"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]],timezone:"EST"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div#wrap_left_content"],transforms:{},clean:[]}},WwwTodayComExtractor:{domain:"www.today.com",title:{selectors:["h1.entry-headline"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="DC.date.issued"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".entry-container"],transforms:{},clean:[".label-comment"]}},WwwHowtogeekComExtractor:{domain:"www.howtogeek.com",title:{selectors:["title"]},author:{selectors:["#authorinfobox a"]},date_published:{selectors:["#authorinfobox + div li"],timezone:"GMT"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".thecontent"],transforms:{},clean:[]}},WwwAlComExtractor:{domain:"www.al.com",title:{selectors:[['meta[name="title"]',"value"]]},author:{selectors:[['meta[name="article_author"]',"value"]]},date_published:{selectors:[['meta[name="article_date_original"]',"value"]],timezone:"EST"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".entry-content"],transforms:{},clean:[]}},WwwThepennyhoarderComExtractor:{domain:"www.thepennyhoarder.com",title:{selectors:[['meta[name="dcterms.title"]',"value"]]},author:{selectors:[['link[rel="author"]',"title"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".post-img",".post-text"],".post-text"],transforms:{},clean:[]}},WwwWesternjournalismComExtractor:{domain:"www.westernjournalism.com",title:{selectors:["title","h1.entry-title"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="DC.date.issued"]',"value"]]},dek:{selectors:[".subtitle"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.article-sharing.top + div"],transforms:{},clean:[".ad-notice-small"]}},FusionNetExtractor:{domain:"fusion.net",title:{selectors:[".post-title",".single-title",".headline"]},author:{selectors:[".show-for-medium .byline"]},date_published:{selectors:[["time.local-time","datetime"]]},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".post-featured-media",".article-content"],".article-content"],transforms:{".fusion-youtube-oembed":"figure"},clean:[]}},WwwAmericanowComExtractor:{domain:"www.americanow.com",title:{selectors:[".title",['meta[name="title"]',"value"]]},author:{selectors:[".byline"]},date_published:{selectors:[['meta[name="publish_date"]',"value"]]},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".article-content",".image",".body"],".body"],transforms:{},clean:[".article-video-wrapper",".show-for-small-only"]}},ScienceflyComExtractor:{domain:"sciencefly.com",title:{selectors:[".entry-title",".cb-entry-title",".cb-single-title"]},author:{selectors:["div.cb-author","div.cb-author-title"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[]},lead_image_url:{selectors:[["div.theiaPostSlider_slides img","src"]]},content:{selectors:["div.theiaPostSlider_slides"],transforms:{},clean:[]}},HellogigglesComExtractor:{domain:"hellogiggles.com",title:{selectors:[".title"]},author:{selectors:[".author-link"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".entry-content"],transforms:{},clean:[]}},ThoughtcatalogComExtractor:{domain:"thoughtcatalog.com",title:{selectors:["h1.title",['meta[name="og:title"]',"value"]]},author:{selectors:["div.col-xs-12.article_header div.writer-container.writer-container-inline.writer-no-avatar h4.writer-name","h1.writer-name"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".entry.post"],transforms:{},clean:[".tc_mark"]}},WwwNjComExtractor:{domain:"www.nj.com",title:{selectors:[['meta[name="title"]',"value"]]},author:{selectors:[['meta[name="article_author"]',"value"]]},date_published:{selectors:[['meta[name="article_date_original"]',"value"]],timezone:"America/New_York"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".entry-content"],transforms:{},clean:[]}},WwwInquisitrComExtractor:{domain:"www.inquisitr.com",title:{selectors:["h1.entry-title.story--header--title"]},author:{selectors:["div.story--header--author"]},date_published:{selectors:[['meta[name="datePublished"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["article.story",".entry-content."],transforms:{},clean:[".post-category",".story--header--socials",".story--header--content"]}},WwwNbcnewsComExtractor:{domain:"www.nbcnews.com",title:{selectors:["div.article-hed h1"]},author:{selectors:["span.byline_author"]},date_published:{selectors:[[".flag_article-wrapper time.timestamp_article[datetime]","datetime"],".flag_article-wrapper time"],timezone:"America/New_York"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.article-body"],transforms:{},clean:[]}},FortuneComExtractor:{domain:"fortune.com",title:{selectors:["h1"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[".MblGHNMJ"],timezone:"UTC"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["picture","article.row"],"article.row"],transforms:{},clean:[]}},WwwLinkedinComExtractor:{domain:"www.linkedin.com",title:{selectors:[".article-title","h1"]},author:{selectors:[['meta[name="article:author"]',"value"],".entity-name a[rel=author]"]},date_published:{selectors:[['time[itemprop="datePublished"]',"datetime"]],timezone:"America/Los_Angeles"},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["header figure",".prose"],".prose"],transforms:{},clean:[".entity-image"]}},ObamawhitehouseArchivesGovExtractor:{domain:"obamawhitehouse.archives.gov",supportedDomains:["whitehouse.gov"],title:{selectors:["h1",".pane-node-title"]},author:{selectors:[".blog-author-link",".node-person-name-link"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[".field-name-field-forall-summary"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{defaultCleaner:!1,selectors:["div#content-start",".pane-node-field-forall-body"],transforms:{},clean:[".pane-node-title",".pane-custom.pane-1"]}},WwwOpposingviewsComExtractor:{domain:"www.opposingviews.com",title:{selectors:["h1.title"]},author:{selectors:["div.date span span a"]},date_published:{selectors:[['meta[name="publish_date"]',"value"]]},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article-content"],transforms:{},clean:[".show-for-small-only"]}},WwwProspectmagazineCoUkExtractor:{domain:"www.prospectmagazine.co.uk",title:{selectors:[".page-title"]},author:{selectors:[".aside_author .title"]},date_published:{selectors:[".post-info"],timezone:"Europe/London"},dek:{selectors:[".page-subtitle"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["article .post_content"],transforms:{},clean:[]}},ForwardComExtractor:{domain:"forward.com",title:{selectors:[['meta[name="og:title"]',"value"]]},author:{selectors:[".author-name",['meta[name="sailthru.author"]',"value"]]},date_published:{selectors:[['meta[name="date"]',"value"]]},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".post-item-media-wrap",".post-item p"]],transforms:{},clean:[".donate-box",".message",".subtitle"]}},WwwQdailyComExtractor:{domain:"www.qdaily.com",title:{selectors:["h2","h2.title"]},author:{selectors:[".name"]},date_published:{selectors:[[".date.smart-date","data-origindate"]]},dek:{selectors:[".excerpt"]},lead_image_url:{selectors:[[".article-detail-hd img","src"]]},content:{selectors:[".detail"],transforms:{},clean:[".lazyload",".lazylad",".lazylood"]}},GothamistComExtractor:{domain:"gothamist.com",supportedDomains:["chicagoist.com","laist.com","sfist.com","shanghaiist.com","dcist.com"],title:{selectors:["h1",".entry-header h1"]},author:{selectors:[".author"]},date_published:{selectors:["abbr","abbr.published"],timezone:"America/New_York"},dek:{selectors:[null]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".entry-body"],transforms:{"div.image-none":"figure",".image-none i":"figcaption","div.image-left":"figure",".image-left i":"figcaption","div.image-right":"figure",".image-right i":"figcaption"},clean:[".image-none br",".image-left br",".image-right br",".galleryEase"]}},WwwFoolComExtractor:{domain:"www.fool.com",title:{selectors:["h1"]},author:{selectors:[".author-inline .author-name"]},date_published:{selectors:[['meta[name="date"]',"value"]]},dek:{selectors:["header h2"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article-content"],transforms:{".caption img":function(e){var t=e.attr("src");e.parent().replaceWith('<figure><img src="'.concat(t,'"/></figure>'))},".caption":"figcaption"},clean:["#pitch"]}},WwwSlateComExtractor:{domain:"www.slate.com",title:{selectors:[".hed","h1"]},author:{selectors:["a[rel=author]"]},date_published:{selectors:[".pub-date"],timezone:"America/New_York"},dek:{selectors:[".dek"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".body"],transforms:{},clean:[".about-the-author",".pullquote",".newsletter-signup-component",".top-comment"]}},IciRadioCanadaCaExtractor:{domain:"ici.radio-canada.ca",title:{selectors:["h1"]},author:{selectors:[['meta[name="dc.creator"]',"value"]]},date_published:{selectors:[['meta[name="dc.date.created"]',"value"]],timezone:"America/New_York"},dek:{selectors:[".bunker-component.lead"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".main-multimedia-item",".news-story-content"]],transforms:{},clean:[]}},WwwFortinetComExtractor:{domain:"www.fortinet.com",title:{selectors:["h1"]},author:{selectors:[".b15-blog-meta__author"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.responsivegrid.aem-GridColumn.aem-GridColumn--default--12"],transforms:{noscript:function(e){var t=e.children();return 1===t.length&&"img"===t.get(0).tagName?"figure":null}}}},WwwFastcompanyComExtractor:{domain:"www.fastcompany.com",title:{selectors:["h1"]},author:{selectors:[".post__by"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[".post__deck"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".post__article"]}},BlisterreviewComExtractor:{domain:"blisterreview.com",title:{selectors:[['meta[name="og:title"]',"value"],"h1.entry-title"]},author:{selectors:["span.author-name"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"],["time.entry-date","datetime"],['meta[itemprop="datePublished"]',"content"]]},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"],['meta[property="og:image"]',"content"],['meta[itemprop="image"]',"content"],['meta[name="twitter:image"]',"content"],["img.attachment-large","src"]]},content:{selectors:[[".elementor-section-wrap",".elementor-text-editor > p, .elementor-text-editor > ul > li, .attachment-large, .wp-caption-text"]],transforms:{figcaption:"p"},clean:[".comments-area"]}},NewsMynaviJpExtractor:{domain:"news.mynavi.jp",title:{selectors:[['meta[name="og:title"]',"value"]]},author:{selectors:["main div.article-author a.article-author__name"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[['meta[name="og:description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["main article div"],transforms:{img:function(e){var t=e.attr("data-original");""!==t&&e.attr("src",t)}},clean:[]}},ClinicaltrialsGovExtractor:{domain:"clinicaltrials.gov",title:{selectors:["h1.tr-solo_record"]},author:{selectors:["div#sponsor.tr-info-text"]},date_published:{selectors:['div:has(> span.term[data-term="Last Update Posted"])']},content:{selectors:["div#tab-body"],transforms:{},clean:[".usa-alert> img"]}},GithubComExtractor:{domain:"github.com",title:{selectors:[['meta[name="og:title"]',"value"]]},author:{selectors:[]},date_published:{selectors:[['span[itemprop="dateModified"] relative-time',"datetime"]]},dek:{selectors:['span[itemprop="about"]']},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["#readme article"]],transforms:{},clean:[]}},WwwRedditComExtractor:{domain:"www.reddit.com",title:{selectors:['div[data-test-id="post-content"] h2']},author:{selectors:['div[data-test-id="post-content"] a[href*="user/"]']},date_published:{selectors:['div[data-test-id="post-content"] a[data-click-id="timestamp"]']},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[['div[data-test-id="post-content"] p'],['div[data-test-id="post-content"] a[target="_blank"]:not([data-click-id="timestamp"])','div[data-test-id="post-content"] div[data-click-id="media"]'],['div[data-test-id="post-content"] div[data-click-id="media"]'],['div[data-test-id="post-content"] a[target="_blank"]:not([data-click-id="timestamp"])'],'div[data-test-id="post-content"]'],transforms:{'div[role="img"]':function(e){var t=e.find("img"),n=e.css("background-image");return 1===t.length&&n?(t.attr("src",n.match(/\((.*?)\)/)[1].replace(/('|")/g,"")),t):e}},clean:[".icon"]}},OtrsComExtractor:{domain:"otrs.com",title:{selectors:["#main article h1"]},author:{selectors:["div.dateplusauthor a"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[['meta[name="og:description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#main article"],defaultCleaner:!1,transforms:{},clean:["div.dateplusauthor","div.gr-12.push-6.footershare","#atftbx","div.category-modul"]}},WwwOssnewsJpExtractor:{domain:"www.ossnews.jp",title:{selectors:["#alpha-block h1.hxnewstitle"]},author:null,date_published:{selectors:["p.fs12"],format:"YYYY年MM月DD日 HH:mm",timezone:"Asia/Tokyo"},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#alpha-block .section:has(h1.hxnewstitle)"],defaultCleaner:!1,transforms:{},clean:[]}},BuzzapJpExtractor:{domain:"buzzap.jp",title:{selectors:["h1.entry-title"]},author:null,date_published:{selectors:[["time.entry-date","datetime"]]},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.ctiframe"],defaultCleaner:!1,transforms:{},clean:[]}},WwwAsahiComExtractor:{domain:"www.asahi.com",title:{selectors:[".ArticleTitle h1"]},author:{selectors:[['meta[name="article:author"]',"value"]]},date_published:{selectors:[['meta[name="pubdate"]',"value"]]},dek:null,excerpt:{selectors:[['meta[name="og:description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#MainInner div.ArticleBody"],defaultCleaner:!1,transforms:{},clean:["div.AdMod","div.LoginSelectArea"]}},WwwSanwaCoJpExtractor:{domain:"www.sanwa.co.jp",title:{selectors:["#newsContent h1"]},author:null,date_published:{selectors:["p.date"],format:"YYYY.MM.DD",timezone:"Asia/Tokyo"},dek:{selectors:[['meta[name="og:description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#newsContent"],defaultCleaner:!1,transforms:{},clean:["#smartphone","div.sns_box","div.contentFoot"]}},WwwElecomCoJpExtractor:{domain:"www.elecom.co.jp",title:{selectors:["title"]},author:null,date_published:{selectors:["p.section-last"],format:"YYYY.MM.DD",timezone:"Asia/Tokyo"},dek:null,lead_image_url:null,content:{selectors:["td.TableMain2"],defaultCleaner:!1,transforms:{table:function(e){e.attr("width","auto")}},clean:[]}},ScanNetsecurityNeJpExtractor:{domain:"scan.netsecurity.ne.jp",title:{selectors:["header.arti-header h1.head"]},author:null,date_published:{selectors:[['meta[name="article:modified_time"]',"value"]]},dek:{selectors:["header.arti-header p.arti-summary"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.arti-content.arti-content--thumbnail"],defaultCleaner:!1,transforms:{},clean:["aside.arti-giga"]}},JvndbJvnJpExtractor:{domain:"jvndb.jvn.jp",title:{selectors:["title"]},author:null,date_published:{selectors:["div.modifytxt:nth-child(2)"],format:"YYYY/MM/DD",timezone:"Asia/Tokyo"},dek:null,lead_image_url:null,content:{selectors:["#news-list"],defaultCleaner:!1,transforms:{},clean:[]}},GeniusComExtractor:Ms,WwwJnsaOrgExtractor:{domain:"www.jnsa.org",title:{selectors:["#wgtitle h2"]},author:null,date_published:null,dek:null,excerpt:{selectors:[['meta[name="og:description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#main_area"],transforms:{},clean:["#pankuzu","#side"]}},PhpspotOrgExtractor:{domain:"phpspot.org",title:{selectors:["h3.hl"]},author:null,date_published:{selectors:["h4.hl"],format:"YYYY年MM月DD日",timezone:"Asia/Tokyo"},dek:null,lead_image_url:null,content:{selectors:["div.entrybody"],defaultCleaner:!1,transforms:{},clean:[]}},WwwInfoqComExtractor:{domain:"www.infoq.com",title:{selectors:["h1.heading"]},author:{selectors:["div.widget.article__authors"]},date_published:{selectors:[".article__readTime.date"],format:"YYYY年MM月DD日",timezone:"Asia/Tokyo"},dek:{selectors:[['meta[name="og:description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.article__data"],defaultCleaner:!1,transforms:{},clean:[]}},WwwMoongiftJpExtractor:{domain:"www.moongift.jp",title:{selectors:["h1.title a"]},author:null,date_published:{selectors:["ul.meta li:not(.social):first-of-type"],timezone:"Asia/Tokyo"},dek:{selectors:[['meta[name="og:description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#main"],transforms:{},clean:["ul.mg_service.cf"]}},WwwItmediaCoJpExtractor:{domain:"www.itmedia.co.jp",supportedDomains:["www.atmarkit.co.jp","techtarget.itmedia.co.jp","nlab.itmedia.co.jp"],title:{selectors:["#cmsTitle h1"]},author:{selectors:["#byline"]},date_published:{selectors:[['meta[name="article:modified_time"]',"value"]]},dek:{selectors:["#cmsAbstract h2"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#cmsBody"],defaultCleaner:!1,transforms:{},clean:["#snsSharebox"]}},WwwPublickey1JpExtractor:{domain:"www.publickey1.jp",title:{selectors:["h1"]},author:{selectors:["#subcol p:has(img)"]},date_published:{selectors:["div.pubdate"],format:"YYYY年MM月DD日",timezone:"Asia/Tokyo"},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#maincol"],defaultCleaner:!1,transforms:{},clean:["#breadcrumbs","div.sbm","div.ad_footer"]}},TakagihiromitsuJpExtractor:{domain:"takagi-hiromitsu.jp",title:{selectors:["h3"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[http-equiv="Last-Modified"]',"value"]]},dek:null,lead_image_url:null,content:{selectors:["div.body"],defaultCleaner:!1,transforms:{},clean:[]}},BookwalkerJpExtractor:{domain:"bookwalker.jp",title:{selectors:["h1.main-heading"]},author:{selectors:["div.authors"]},date_published:{selectors:[".work-info .work-detail:first-of-type .work-detail-contents:last-of-type"],timezone:"Asia/Tokyo"},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["div.main-info","div.main-cover-inner"]],defaultCleaner:!1,transforms:{},clean:["span.label.label--trial","dt.info-head.info-head--coin","dd.info-contents.info-contents--coin","div.info-notice.fn-toggleClass"]}},WwwYomiuriCoJpExtractor:{domain:"www.yomiuri.co.jp",title:{selectors:["h1.title-article.c-article-title"]},author:null,date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.p-main-contents"],transforms:{},clean:[]}},JapanCnetComExtractor:{domain:"japan.cnet.com",title:{selectors:[".leaf-headline-ttl"]},author:{selectors:[".writer"]},date_published:{selectors:[".date"],format:"YYYY年MM月DD日 HH時mm分",timezone:"Asia/Tokyo"},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.article_body"],transforms:{},clean:[]}},DeadlineComExtractor:{domain:"deadline.com",title:{selectors:["h1"]},author:{selectors:["section.author h3"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.a-article-grid__main.pmc-a-grid article.pmc-a-grid-item"],transforms:{".embed-twitter":function(e){var t=e.html();e.replaceWith(t)}},clean:[]}},WwwGizmodoJpExtractor:{domain:"www.gizmodo.jp",title:{selectors:["h1.p-post-title"]},author:{selectors:["li.p-post-AssistAuthor"]},date_published:{selectors:[["li.p-post-AssistTime time","datetime"]]},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["article.p-post"],transforms:{"img.p-post-thumbnailImage":function(e){var t=e.attr("src");e.attr("src",t.replace(/^.*=%27/,"").replace(/%27;$/,""))}},clean:["h1.p-post-title","ul.p-post-Assist"]}},GetnewsJpExtractor:{domain:"getnews.jp",title:{selectors:["article h1"]},author:{selectors:["span.prof"]},date_published:{selectors:[["ul.cattag-top time","datetime"]]},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.post-bodycopy"],transforms:{},clean:[]}},WwwLifehackerJpExtractor:{domain:"www.lifehacker.jp",title:{selectors:["h1.lh-summary-title"]},author:{selectors:["p.lh-entryDetailInner--credit"]},date_published:{selectors:[["div.lh-entryDetail-header time","datetime"]]},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.lh-entryDetail-body"],transforms:{"img.lazyload":function(e){var t=e.attr("src");e.attr("src",t.replace(/^.*=%27/,"").replace(/%27;$/,""))}},clean:["p.lh-entryDetailInner--credit"]}},SectIijAdJpExtractor:{domain:"sect.iij.ad.jp",title:{selectors:["h3"]},author:{selectors:["dl.entrydate dd"]},date_published:{selectors:["dl.entrydate dd"],format:"YYYY年MM月DD日",timezone:"Asia/Tokyo"},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#article"],transforms:{},clean:["dl.entrydate"]}},WwwOreillyCoJpExtractor:{domain:"www.oreilly.co.jp",title:{selectors:["h3"]},author:{selectors:['li[itemprop="author"]']},date_published:{selectors:[['meta[itemprop="datePublished"]',"value"]],timezone:"Asia/Tokyo"},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#content"],defaultCleaner:!1,transforms:{},clean:[".social-tools"]}},WwwIpaGoJpExtractor:{domain:"www.ipa.go.jp",title:{selectors:["h1"]},author:null,date_published:{selectors:["p.ipar_text_right"],format:"YYYY年M月D日",timezone:"Asia/Tokyo"},dek:null,lead_image_url:null,content:{selectors:["#ipar_main"],defaultCleaner:!1,transforms:{},clean:["p.ipar_text_right"]}},WeeklyAsciiJpExtractor:{domain:"weekly.ascii.jp",title:{selectors:['h1[itemprop="headline"]']},author:{selectors:["p.author"]},date_published:{selectors:[['meta[name="odate"]',"value"]]},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.article"],transforms:{},clean:[]}},TechlogIijAdJpExtractor:{domain:"techlog.iij.ad.jp",title:{selectors:["h1.entry-title"]},author:{selectors:['a[rel="author"]']},date_published:{selectors:[["time.entry-date","datetime"]]},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.entry-content"],defaultCleaner:!1,transforms:{},clean:[]}},WiredJpExtractor:Ts,JapanZdnetComExtractor:{domain:"japan.zdnet.com",title:{selectors:["h1"]},author:{selectors:[['meta[name="cXenseParse:author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:null,lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.article_body"],transforms:{},clean:[]}},WwwRbbtodayComExtractor:{domain:"www.rbbtoday.com",title:{selectors:["h1"]},author:{selectors:[".writer.writer-name"]},date_published:{selectors:[["header time","datetime"]]},dek:{selectors:[".arti-summary"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".arti-content"],transforms:{},clean:[".arti-giga"]}},WwwLemondeFrExtractor:{domain:"www.lemonde.fr",title:{selectors:["h1.article__title"]},author:{selectors:[".author__name"]},date_published:{selectors:[['meta[name="og:article:published_time"]',"value"]]},dek:{selectors:[".article__desc"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article__content"],transforms:{},clean:[]}},WwwPhoronixComExtractor:{domain:"www.phoronix.com",title:{selectors:["article header"]},author:{selectors:[".author a:first-child"]},date_published:{selectors:[".author"],format:"D MMMM YYYY at hh:mm",timezone:"America/New_York"},dek:null,lead_image_url:null,content:{selectors:[".content"],transforms:{},clean:[]}},PitchforkComExtractor:{domain:"pitchfork.com",title:{selectors:["title"]},author:{selectors:[".authors-detail__display-name"]},date_published:{selectors:[[".pub-date","datetime"]]},dek:{selectors:[".review-detail__abstract"]},lead_image_url:{selectors:[[".single-album-tombstone__art img","src"]]},content:{selectors:[".review-detail__text"]},extend:{score:{selectors:[".score"]}}},BiorxivOrgExtractor:{domain:"biorxiv.org",title:{selectors:["h1#page-title"]},author:{selectors:["div.highwire-citation-biorxiv-article-top > div.highwire-cite-authors"]},content:{selectors:["div#abstract-1"],transforms:{},clean:[]}},EpaperZeitDeExtractor:{domain:"epaper.zeit.de",title:{selectors:["p.title"]},author:{selectors:[".article__author"]},date_published:null,excerpt:{selectors:["subtitle"]},lead_image_url:null,content:{selectors:[".article"],transforms:{"p.title":"h1",".article__author":"p",byline:"p",linkbox:"p"},clean:["image-credits","box[type=citation]"]}}}),Ds=lt(Cs).reduce(function(e,t){var n=Cs[t];return pt({},e,_s(n))},{}),Os=e(function(e,t){(function(){var r="‎",a="‏",m="ltr",g="rtl",i="bidi",o="",v={Hebrew:["0590","05FF"],Arabic:["0600","06FF"],NKo:["07C0","07FF"],Syriac:["0700","074F"],Thaana:["0780","07BF"],Tifinagh:["2D30","2D7F"]};function e(e){if(void 0===e)throw new Error("TypeError missing argument");if("string"!=typeof e)throw new Error("TypeError getDirection expects strings");if(""===e)return o;if(-1<e.indexOf(r)&&-1<e.indexOf(a))return i;if(-1<e.indexOf(r))return m;if(-1<e.indexOf(a))return g;var t=s(e,g),n=s(e,m);return t&&n?i:n?m:t?g:o}function s(e,t){var n,r,a,i,o,s,u,c,l,f,h,d=!1,p=!1;for(o=-1<e.search(/[0-9]/),e=e.replace(/[\s\n\0\f\t\v\'\"\-0-9\+\?\!]+/gm,""),n=0;n<e.length;n++){for(a in r=e.charAt(n),i=!1,v)v.hasOwnProperty(a)&&(s=r,u=v[a][0],c=v[a][1],void 0,l=s.charCodeAt(0),f=parseInt(u,16),h=parseInt(c,16),f<l&&l<h&&(i=d=!0));!1===i&&(p=!0)}return t===g?d:t===m?p||!d&&o:void 0}t.getDirection=e,t.patch=function(){String.prototype.getDirection=function(){return e(this.valueOf())}}}).call(this)}),js=(Os.getDirection,Os.patch,/^\s*(posted |written )?by\s*:?\s*(.*)/i),Ns=new RegExp("http(s)?://","i"),zs=/^\d{13}$/i,Ps=/^\d{10}$/i,Ls=/^\s*published\s*:?\s*(.*)/i,Rs=/(.*\d)(am|pm)(.*)/i,Ys=/\.m\./i,Ws=/^\s*(just|right)?\s*now\s*/i,qs=["seconds?","minutes?","hours?","days?","weeks?","months?","years?"].join("|"),Is=new RegExp("(\\d+)\\s+(".concat(qs,")\\s+ago"),"i"),Hs=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"].join("|"),Fs=new RegExp("(".concat("[0-9]{1,2}:[0-9]{2,2}( ?[ap].?m.?)?",")|(").concat("[0-9]{1,2}[/-][0-9]{1,2}[/-][0-9]{2,4}",")|(").concat("-[0-9]{3,4}$",")|([0-9]{1,4})|(").concat(Hs,")"),"ig"),Bs=/-\d{3,4}$/,Gs=/(: | - | \| )/g,Us=new RegExp(".com$|.net$|.org$|.co.uk$","g");function $s(e){return ua(e.replace(js,"$2").trim())}var Vs=e(function(e){!function(e){e.exports.is_uri=f,e.exports.is_http_uri=t,e.exports.is_https_uri=n,e.exports.is_web_uri=r,e.exports.isUri=f,e.exports.isHttpUri=t,e.exports.isHttpsUri=n,e.exports.isWebUri=r;var l=function(e){return e.match(/(?:([^:\/?#]+):)?(?:\/\/([^\/?#]*))?([^?#]*)(?:\?([^#]*))?(?:#(.*))?/)};function f(e){if(e&&!/[^a-z0-9\:\/\?\#\[\]\@\!\$\&\'\(\)\*\+\,\;\=\.\-\_\~\%]/i.test(e)&&!/%[^0-9a-f]/i.test(e)&&!/%[0-9a-f](:?[^0-9a-f]|$)/i.test(e)){var t,n,r,a,i,o="",s="";if(o=(t=l(e))[1],n=t[2],r=t[3],a=t[4],i=t[5],o&&o.length&&0<=r.length){if(n&&n.length){if(0!==r.length&&!/^\//.test(r))return}else if(/^\/\//.test(r))return;if(/^[a-z][a-z0-9\+\-\.]*$/.test(o.toLowerCase()))return s+=o+":",n&&n.length&&(s+="//"+n),s+=r,a&&a.length&&(s+="?"+a),i&&i.length&&(s+="#"+i),s}}}function t(e,t){if(f(e)){var n,r,a,i,o="",s="",u="",c="";if(o=(n=l(e))[1],s=n[2],r=n[3],a=n[4],i=n[5],o){if(t){if("https"!=o.toLowerCase())return}else if("http"!=o.toLowerCase())return;if(s)return/:(\d+)$/.test(s)&&(u=s.match(/:(\d+)$/)[0],s=s.replace(/:\d+$/,"")),c+=o+":",c+="//"+s,u&&(c+=u),c+=r,a&&a.length&&(c+="?"+a),i&&i.length&&(c+="#"+i),c}}}function n(e){return t(e,!0)}function r(e){return t(e)||n(e)}}(e)});function Js(e){return e=e.trim(),Vs.isWebUri(e)?e:null}var Ks=e(function(Un,e){Un.exports=function(){var e,a;function g(){return e.apply(null,arguments)}function s(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function u(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function i(e){return void 0===e}function l(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)}function o(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function c(e,t){var n,r=[];for(n=0;n<e.length;++n)r.push(t(e[n],n));return r}function v(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function f(e,t){for(var n in t)v(t,n)&&(e[n]=t[n]);return v(t,"toString")&&(e.toString=t.toString),v(t,"valueOf")&&(e.valueOf=t.valueOf),e}function h(e,t,n,r){return Ct(e,t,n,r,!0).utc()}function y(e){return null==e._pf&&(e._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],meridiem:null,rfc2822:!1,weekdayMismatch:!1}),e._pf}function d(e){if(null==e._isValid){var t=y(e),n=a.call(t.parsedDateParts,function(e){return null!=e}),r=!isNaN(e._d.getTime())&&t.overflow<0&&!t.empty&&!t.invalidMonth&&!t.invalidWeekday&&!t.weekdayMismatch&&!t.nullInput&&!t.invalidFormat&&!t.userInvalidated&&(!t.meridiem||t.meridiem&&n);if(e._strict&&(r=r&&0===t.charsLeftOver&&0===t.unusedTokens.length&&void 0===t.bigHour),null!=Object.isFrozen&&Object.isFrozen(e))return r;e._isValid=r}return e._isValid}function p(e){var t=h(NaN);return null!=e?f(y(t),e):y(t).userInvalidated=!0,t}a=Array.prototype.some?Array.prototype.some:function(e){for(var t=Object(this),n=t.length>>>0,r=0;r<n;r++)if(r in t&&e.call(this,t[r],r,t))return!0;return!1};var m=g.momentProperties=[];function _(e,t){var n,r,a;if(i(t._isAMomentObject)||(e._isAMomentObject=t._isAMomentObject),i(t._i)||(e._i=t._i),i(t._f)||(e._f=t._f),i(t._l)||(e._l=t._l),i(t._strict)||(e._strict=t._strict),i(t._tzm)||(e._tzm=t._tzm),i(t._isUTC)||(e._isUTC=t._isUTC),i(t._offset)||(e._offset=t._offset),i(t._pf)||(e._pf=y(t)),i(t._locale)||(e._locale=t._locale),0<m.length)for(n=0;n<m.length;n++)r=m[n],i(a=t[r])||(e[r]=a);return e}var t=!1;function b(e){_(this,e),this._d=new Date(null!=e._d?e._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===t&&(t=!0,g.updateOffset(this),t=!1)}function w(e){return e instanceof b||null!=e&&null!=e._isAMomentObject}function A(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function x(e){var t=+e,n=0;return 0!==t&&isFinite(t)&&(n=A(t)),n}function k(e,t,n){var r,a=Math.min(e.length,t.length),i=Math.abs(e.length-t.length),o=0;for(r=0;r<a;r++)(n&&e[r]!==t[r]||!n&&x(e[r])!==x(t[r]))&&o++;return o+i}function E(e){!1===g.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+e)}function n(a,i){var o=!0;return f(function(){if(null!=g.deprecationHandler&&g.deprecationHandler(null,a),o){for(var e,t=[],n=0;n<arguments.length;n++){if(e="","object"==typeof arguments[n]){for(var r in e+="\n["+n+"] ",arguments[0])e+=r+": "+arguments[0][r]+", ";e=e.slice(0,-2)}else e=arguments[n];t.push(e)}E(a+"\nArguments: "+Array.prototype.slice.call(t).join("")+"\n"+(new Error).stack),o=!1}return i.apply(this,arguments)},i)}var r,S={};function M(e,t){null!=g.deprecationHandler&&g.deprecationHandler(e,t),S[e]||(E(t),S[e]=!0)}function T(e){return e instanceof Function||"[object Function]"===Object.prototype.toString.call(e)}function C(e,t){var n,r=f({},e);for(n in t)v(t,n)&&(u(e[n])&&u(t[n])?(r[n]={},f(r[n],e[n]),f(r[n],t[n])):null!=t[n]?r[n]=t[n]:delete r[n]);for(n in e)v(e,n)&&!v(t,n)&&u(e[n])&&(r[n]=f({},r[n]));return r}function D(e){null!=e&&this.set(e)}g.suppressDeprecationWarnings=!1,g.deprecationHandler=null,r=Object.keys?Object.keys:function(e){var t,n=[];for(t in e)v(e,t)&&n.push(t);return n};var O={};function j(e,t){var n=e.toLowerCase();O[n]=O[n+"s"]=O[t]=e}function N(e){return"string"==typeof e?O[e]||O[e.toLowerCase()]:void 0}function z(e){var t,n,r={};for(n in e)v(e,n)&&(t=N(n))&&(r[t]=e[n]);return r}var P={};function L(e,t){P[e]=t}function R(e){var t=[];for(var n in e)t.push({unit:n,priority:P[n]});return t.sort(function(e,t){return e.priority-t.priority}),t}function Y(e,t,n){var r=""+Math.abs(e),a=t-r.length,i=0<=e;return(i?n?"+":"":"-")+Math.pow(10,Math.max(0,a)).toString().substr(1)+r}var W=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,q=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,I={},H={};function F(e,t,n,r){var a=r;"string"==typeof r&&(a=function(){return this[r]()}),e&&(H[e]=a),t&&(H[t[0]]=function(){return Y(a.apply(this,arguments),t[1],t[2])}),n&&(H[n]=function(){return this.localeData().ordinal(a.apply(this,arguments),e)})}function B(e,t){return e.isValid()?(t=G(t,e.localeData()),I[t]=I[t]||function(r){var e,a,t,i=r.match(W);for(e=0,a=i.length;e<a;e++)H[i[e]]?i[e]=H[i[e]]:i[e]=(t=i[e]).match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"");return function(e){var t,n="";for(t=0;t<a;t++)n+=T(i[t])?i[t].call(e,r):i[t];return n}}(t),I[t](e)):e.localeData().invalidDate()}function G(e,t){var n=5;function r(e){return t.longDateFormat(e)||e}for(q.lastIndex=0;0<=n&&q.test(e);)e=e.replace(q,r),q.lastIndex=0,n-=1;return e}var U=/\d/,$=/\d\d/,V=/\d{3}/,J=/\d{4}/,K=/[+-]?\d{6}/,X=/\d\d?/,Z=/\d\d\d\d?/,Q=/\d\d\d\d\d\d?/,ee=/\d{1,3}/,te=/\d{1,4}/,ne=/[+-]?\d{1,6}/,re=/\d+/,ae=/[+-]?\d+/,ie=/Z|[+-]\d\d:?\d\d/gi,oe=/Z|[+-]\d\d(?::?\d\d)?/gi,se=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,ue={};function ce(e,n,r){ue[e]=T(n)?n:function(e,t){return e&&r?r:n}}function le(e,t){return v(ue,e)?ue[e](t._strict,t._locale):new RegExp(fe(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(e,t,n,r,a){return t||n||r||a})))}function fe(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}var he={};function de(e,n){var t,r=n;for("string"==typeof e&&(e=[e]),l(n)&&(r=function(e,t){t[n]=x(e)}),t=0;t<e.length;t++)he[e[t]]=r}function pe(e,a){de(e,function(e,t,n,r){n._w=n._w||{},a(e,n._w,n,r)})}var me=0,ge=1,ve=2,ye=3,_e=4,be=5,we=6,Ae=7,xe=8;function ke(e){return Ee(e)?366:365}function Ee(e){return e%4==0&&e%100!=0||e%400==0}F("Y",0,0,function(){var e=this.year();return e<=9999?""+e:"+"+e}),F(0,["YY",2],0,function(){return this.year()%100}),F(0,["YYYY",4],0,"year"),F(0,["YYYYY",5],0,"year"),F(0,["YYYYYY",6,!0],0,"year"),j("year","y"),L("year",1),ce("Y",ae),ce("YY",X,$),ce("YYYY",te,J),ce("YYYYY",ne,K),ce("YYYYYY",ne,K),de(["YYYYY","YYYYYY"],me),de("YYYY",function(e,t){t[me]=2===e.length?g.parseTwoDigitYear(e):x(e)}),de("YY",function(e,t){t[me]=g.parseTwoDigitYear(e)}),de("Y",function(e,t){t[me]=parseInt(e,10)}),g.parseTwoDigitYear=function(e){return x(e)+(68<x(e)?1900:2e3)};var Se,Me=Te("FullYear",!0);function Te(t,n){return function(e){return null!=e?(De(this,t,e),g.updateOffset(this,n),this):Ce(this,t)}}function Ce(e,t){return e.isValid()?e._d["get"+(e._isUTC?"UTC":"")+t]():NaN}function De(e,t,n){e.isValid()&&!isNaN(n)&&("FullYear"===t&&Ee(e.year())&&1===e.month()&&29===e.date()?e._d["set"+(e._isUTC?"UTC":"")+t](n,e.month(),Oe(n,e.month())):e._d["set"+(e._isUTC?"UTC":"")+t](n))}function Oe(e,t){if(isNaN(e)||isNaN(t))return NaN;var n,r=(t%(n=12)+n)%n;return e+=(t-r)/12,1===r?Ee(e)?29:28:31-r%7%2}Se=Array.prototype.indexOf?Array.prototype.indexOf:function(e){var t;for(t=0;t<this.length;++t)if(this[t]===e)return t;return-1},F("M",["MM",2],"Mo",function(){return this.month()+1}),F("MMM",0,0,function(e){return this.localeData().monthsShort(this,e)}),F("MMMM",0,0,function(e){return this.localeData().months(this,e)}),j("month","M"),L("month",8),ce("M",X),ce("MM",X,$),ce("MMM",function(e,t){return t.monthsShortRegex(e)}),ce("MMMM",function(e,t){return t.monthsRegex(e)}),de(["M","MM"],function(e,t){t[ge]=x(e)-1}),de(["MMM","MMMM"],function(e,t,n,r){var a=n._locale.monthsParse(e,r,n._strict);null!=a?t[ge]=a:y(n).invalidMonth=e});var je=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,Ne="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ze="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_");function Pe(e,t,n){var r,a,i,o=e.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],r=0;r<12;++r)i=h([2e3,r]),this._shortMonthsParse[r]=this.monthsShort(i,"").toLocaleLowerCase(),this._longMonthsParse[r]=this.months(i,"").toLocaleLowerCase();return n?"MMM"===t?-1!==(a=Se.call(this._shortMonthsParse,o))?a:null:-1!==(a=Se.call(this._longMonthsParse,o))?a:null:"MMM"===t?-1!==(a=Se.call(this._shortMonthsParse,o))?a:-1!==(a=Se.call(this._longMonthsParse,o))?a:null:-1!==(a=Se.call(this._longMonthsParse,o))?a:-1!==(a=Se.call(this._shortMonthsParse,o))?a:null}function Le(e,t){var n;if(!e.isValid())return e;if("string"==typeof t)if(/^\d+$/.test(t))t=x(t);else if(!l(t=e.localeData().monthsParse(t)))return e;return n=Math.min(e.date(),Oe(e.year(),t)),e._d["set"+(e._isUTC?"UTC":"")+"Month"](t,n),e}function Re(e){return null!=e?(Le(this,e),g.updateOffset(this,!0),this):Ce(this,"Month")}var Ye=se,We=se;function qe(){function e(e,t){return t.length-e.length}var t,n,r=[],a=[],i=[];for(t=0;t<12;t++)n=h([2e3,t]),r.push(this.monthsShort(n,"")),a.push(this.months(n,"")),i.push(this.months(n,"")),i.push(this.monthsShort(n,""));for(r.sort(e),a.sort(e),i.sort(e),t=0;t<12;t++)r[t]=fe(r[t]),a[t]=fe(a[t]);for(t=0;t<24;t++)i[t]=fe(i[t]);this._monthsRegex=new RegExp("^("+i.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+a.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+r.join("|")+")","i")}function Ie(e){var t=new Date(Date.UTC.apply(null,arguments));return e<100&&0<=e&&isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e),t}function He(e,t,n){var r=7+t-n,a=(7+Ie(e,0,r).getUTCDay()-t)%7;return-a+r-1}function Fe(e,t,n,r,a){var i,o,s=(7+n-r)%7,u=He(e,r,a),c=1+7*(t-1)+s+u;return o=c<=0?ke(i=e-1)+c:c>ke(e)?(i=e+1,c-ke(e)):(i=e,c),{year:i,dayOfYear:o}}function Be(e,t,n){var r,a,i=He(e.year(),t,n),o=Math.floor((e.dayOfYear()-i-1)/7)+1;return o<1?(a=e.year()-1,r=o+Ge(a,t,n)):o>Ge(e.year(),t,n)?(r=o-Ge(e.year(),t,n),a=e.year()+1):(a=e.year(),r=o),{week:r,year:a}}function Ge(e,t,n){var r=He(e,t,n),a=He(e+1,t,n);return(ke(e)-r+a)/7}F("w",["ww",2],"wo","week"),F("W",["WW",2],"Wo","isoWeek"),j("week","w"),j("isoWeek","W"),L("week",5),L("isoWeek",5),ce("w",X),ce("ww",X,$),ce("W",X),ce("WW",X,$),pe(["w","ww","W","WW"],function(e,t,n,r){t[r.substr(0,1)]=x(e)}),F("d",0,"do","day"),F("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),F("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),F("dddd",0,0,function(e){return this.localeData().weekdays(this,e)}),F("e",0,0,"weekday"),F("E",0,0,"isoWeekday"),j("day","d"),j("weekday","e"),j("isoWeekday","E"),L("day",11),L("weekday",11),L("isoWeekday",11),ce("d",X),ce("e",X),ce("E",X),ce("dd",function(e,t){return t.weekdaysMinRegex(e)}),ce("ddd",function(e,t){return t.weekdaysShortRegex(e)}),ce("dddd",function(e,t){return t.weekdaysRegex(e)}),pe(["dd","ddd","dddd"],function(e,t,n,r){var a=n._locale.weekdaysParse(e,r,n._strict);null!=a?t.d=a:y(n).invalidWeekday=e}),pe(["d","e","E"],function(e,t,n,r){t[r]=x(e)});var Ue="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),$e="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Ve="Su_Mo_Tu_We_Th_Fr_Sa".split("_");function Je(e,t,n){var r,a,i,o=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],r=0;r<7;++r)i=h([2e3,1]).day(r),this._minWeekdaysParse[r]=this.weekdaysMin(i,"").toLocaleLowerCase(),this._shortWeekdaysParse[r]=this.weekdaysShort(i,"").toLocaleLowerCase(),this._weekdaysParse[r]=this.weekdays(i,"").toLocaleLowerCase();return n?"dddd"===t?-1!==(a=Se.call(this._weekdaysParse,o))?a:null:"ddd"===t?-1!==(a=Se.call(this._shortWeekdaysParse,o))?a:null:-1!==(a=Se.call(this._minWeekdaysParse,o))?a:null:"dddd"===t?-1!==(a=Se.call(this._weekdaysParse,o))?a:-1!==(a=Se.call(this._shortWeekdaysParse,o))?a:-1!==(a=Se.call(this._minWeekdaysParse,o))?a:null:"ddd"===t?-1!==(a=Se.call(this._shortWeekdaysParse,o))?a:-1!==(a=Se.call(this._weekdaysParse,o))?a:-1!==(a=Se.call(this._minWeekdaysParse,o))?a:null:-1!==(a=Se.call(this._minWeekdaysParse,o))?a:-1!==(a=Se.call(this._weekdaysParse,o))?a:-1!==(a=Se.call(this._shortWeekdaysParse,o))?a:null}var Ke=se,Xe=se,Ze=se;function Qe(){function e(e,t){return t.length-e.length}var t,n,r,a,i,o=[],s=[],u=[],c=[];for(t=0;t<7;t++)n=h([2e3,1]).day(t),r=this.weekdaysMin(n,""),a=this.weekdaysShort(n,""),i=this.weekdays(n,""),o.push(r),s.push(a),u.push(i),c.push(r),c.push(a),c.push(i);for(o.sort(e),s.sort(e),u.sort(e),c.sort(e),t=0;t<7;t++)s[t]=fe(s[t]),u[t]=fe(u[t]),c[t]=fe(c[t]);this._weekdaysRegex=new RegExp("^("+c.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+s.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+o.join("|")+")","i")}function et(){return this.hours()%12||12}function tt(e,t){F(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}function nt(e,t){return t._meridiemParse}F("H",["HH",2],0,"hour"),F("h",["hh",2],0,et),F("k",["kk",2],0,function(){return this.hours()||24}),F("hmm",0,0,function(){return""+et.apply(this)+Y(this.minutes(),2)}),F("hmmss",0,0,function(){return""+et.apply(this)+Y(this.minutes(),2)+Y(this.seconds(),2)}),F("Hmm",0,0,function(){return""+this.hours()+Y(this.minutes(),2)}),F("Hmmss",0,0,function(){return""+this.hours()+Y(this.minutes(),2)+Y(this.seconds(),2)}),tt("a",!0),tt("A",!1),j("hour","h"),L("hour",13),ce("a",nt),ce("A",nt),ce("H",X),ce("h",X),ce("k",X),ce("HH",X,$),ce("hh",X,$),ce("kk",X,$),ce("hmm",Z),ce("hmmss",Q),ce("Hmm",Z),ce("Hmmss",Q),de(["H","HH"],ye),de(["k","kk"],function(e,t,n){var r=x(e);t[ye]=24===r?0:r}),de(["a","A"],function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e}),de(["h","hh"],function(e,t,n){t[ye]=x(e),y(n).bigHour=!0}),de("hmm",function(e,t,n){var r=e.length-2;t[ye]=x(e.substr(0,r)),t[_e]=x(e.substr(r)),y(n).bigHour=!0}),de("hmmss",function(e,t,n){var r=e.length-4,a=e.length-2;t[ye]=x(e.substr(0,r)),t[_e]=x(e.substr(r,2)),t[be]=x(e.substr(a)),y(n).bigHour=!0}),de("Hmm",function(e,t,n){var r=e.length-2;t[ye]=x(e.substr(0,r)),t[_e]=x(e.substr(r))}),de("Hmmss",function(e,t,n){var r=e.length-4,a=e.length-2;t[ye]=x(e.substr(0,r)),t[_e]=x(e.substr(r,2)),t[be]=x(e.substr(a))});var rt,at=Te("Hours",!0),it={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:Ne,monthsShort:ze,week:{dow:0,doy:6},weekdays:Ue,weekdaysMin:Ve,weekdaysShort:$e,meridiemParse:/[ap]\.?m?\.?/i},ot={},st={};function ut(e){return e?e.toLowerCase().replace("_","-"):e}function ct(e){var t=null;if(!ot[e]&&Un&&Un.exports)try{t=rt._abbr;var n=$n;n("./locale/"+e),lt(t)}catch(e){}return ot[e]}function lt(e,t){var n;return e&&((n=i(t)?ht(e):ft(e,t))?rt=n:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),rt._abbr}function ft(e,t){if(null===t)return delete ot[e],null;var n,r=it;if(t.abbr=e,null!=ot[e])M("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),r=ot[e]._config;else if(null!=t.parentLocale)if(null!=ot[t.parentLocale])r=ot[t.parentLocale]._config;else{if(null==(n=ct(t.parentLocale)))return st[t.parentLocale]||(st[t.parentLocale]=[]),st[t.parentLocale].push({name:e,config:t}),null;r=n._config}return ot[e]=new D(C(r,t)),st[e]&&st[e].forEach(function(e){ft(e.name,e.config)}),lt(e),ot[e]}function ht(e){var t;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return rt;if(!s(e)){if(t=ct(e))return t;e=[e]}return function(e){for(var t,n,r,a,i=0;i<e.length;){for(a=ut(e[i]).split("-"),t=a.length,n=(n=ut(e[i+1]))?n.split("-"):null;0<t;){if(r=ct(a.slice(0,t).join("-")))return r;if(n&&n.length>=t&&k(a,n,!0)>=t-1)break;t--}i++}return rt}(e)}function dt(e){var t,n=e._a;return n&&-2===y(e).overflow&&(t=n[ge]<0||11<n[ge]?ge:n[ve]<1||n[ve]>Oe(n[me],n[ge])?ve:n[ye]<0||24<n[ye]||24===n[ye]&&(0!==n[_e]||0!==n[be]||0!==n[we])?ye:n[_e]<0||59<n[_e]?_e:n[be]<0||59<n[be]?be:n[we]<0||999<n[we]?we:-1,y(e)._overflowDayOfYear&&(t<me||ve<t)&&(t=ve),y(e)._overflowWeeks&&-1===t&&(t=Ae),y(e)._overflowWeekday&&-1===t&&(t=xe),y(e).overflow=t),e}function pt(e,t,n){return null!=e?e:null!=t?t:n}function mt(e){var t,n,r,a,i,o,s,u=[];if(!e._d){for(o=e,s=void 0,s=new Date(g.now()),r=o._useUTC?[s.getUTCFullYear(),s.getUTCMonth(),s.getUTCDate()]:[s.getFullYear(),s.getMonth(),s.getDate()],e._w&&null==e._a[ve]&&null==e._a[ge]&&function(e){var t,n,r,a,i,o,s,u;if(null!=(t=e._w).GG||null!=t.W||null!=t.E)i=1,o=4,n=pt(t.GG,e._a[me],Be(Dt(),1,4).year),r=pt(t.W,1),((a=pt(t.E,1))<1||7<a)&&(u=!0);else{i=e._locale._week.dow,o=e._locale._week.doy;var c=Be(Dt(),i,o);n=pt(t.gg,e._a[me],c.year),r=pt(t.w,c.week),null!=t.d?((a=t.d)<0||6<a)&&(u=!0):null!=t.e?(a=t.e+i,(t.e<0||6<t.e)&&(u=!0)):a=i}r<1||r>Ge(n,i,o)?y(e)._overflowWeeks=!0:null!=u?y(e)._overflowWeekday=!0:(s=Fe(n,r,a,i,o),e._a[me]=s.year,e._dayOfYear=s.dayOfYear)}(e),null!=e._dayOfYear&&(i=pt(e._a[me],r[me]),(e._dayOfYear>ke(i)||0===e._dayOfYear)&&(y(e)._overflowDayOfYear=!0),n=Ie(i,0,e._dayOfYear),e._a[ge]=n.getUTCMonth(),e._a[ve]=n.getUTCDate()),t=0;t<3&&null==e._a[t];++t)e._a[t]=u[t]=r[t];for(;t<7;t++)e._a[t]=u[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[ye]&&0===e._a[_e]&&0===e._a[be]&&0===e._a[we]&&(e._nextDay=!0,e._a[ye]=0),e._d=(e._useUTC?Ie:function(e,t,n,r,a,i,o){var s=new Date(e,t,n,r,a,i,o);return e<100&&0<=e&&isFinite(s.getFullYear())&&s.setFullYear(e),s}).apply(null,u),a=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[ye]=24),e._w&&void 0!==e._w.d&&e._w.d!==a&&(y(e).weekdayMismatch=!0)}}var gt=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,vt=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,yt=/Z|[+-]\d\d(?::?\d\d)?/,_t=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],bt=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],wt=/^\/?Date\((\-?\d+)/i;function At(e){var t,n,r,a,i,o,s=e._i,u=gt.exec(s)||vt.exec(s);if(u){for(y(e).iso=!0,t=0,n=_t.length;t<n;t++)if(_t[t][1].exec(u[1])){a=_t[t][0],r=!1!==_t[t][2];break}if(null==a)return void(e._isValid=!1);if(u[3]){for(t=0,n=bt.length;t<n;t++)if(bt[t][1].exec(u[3])){i=(u[2]||" ")+bt[t][0];break}if(null==i)return void(e._isValid=!1)}if(!r&&null!=i)return void(e._isValid=!1);if(u[4]){if(!yt.exec(u[4]))return void(e._isValid=!1);o="Z"}e._f=a+(i||"")+(o||""),Mt(e)}else e._isValid=!1}var xt=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/;function kt(e,t,n,r,a,i){var o,s,u=[(o=e,s=parseInt(o,10),s<=49?2e3+s:s<=999?1900+s:s),ze.indexOf(t),parseInt(n,10),parseInt(r,10),parseInt(a,10)];return i&&u.push(parseInt(i,10)),u}var Et={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function St(e){var t=xt.exec(e._i.replace(/\([^)]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,""));if(t){var n=kt(t[4],t[3],t[2],t[5],t[6],t[7]);if(!function(e,t,n){if(e){var r=$e.indexOf(e),a=new Date(t[0],t[1],t[2]).getDay();if(r!==a)return y(n).weekdayMismatch=!0,n._isValid=!1}return!0}(t[1],n,e))return;e._a=n,e._tzm=function(e,t,n){if(e)return Et[e];if(t)return 0;var r=parseInt(n,10),a=r%100,i=(r-a)/100;return 60*i+a}(t[8],t[9],t[10]),e._d=Ie.apply(null,e._a),e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),y(e).rfc2822=!0}else e._isValid=!1}function Mt(e){if(e._f!==g.ISO_8601)if(e._f!==g.RFC_2822){e._a=[],y(e).empty=!0;var t,n,r,a,i,o=""+e._i,s=o.length,u=0;for(r=G(e._f,e._locale).match(W)||[],t=0;t<r.length;t++)a=r[t],(n=(o.match(le(a,e))||[])[0])&&(0<(i=o.substr(0,o.indexOf(n))).length&&y(e).unusedInput.push(i),o=o.slice(o.indexOf(n)+n.length),u+=n.length),H[a]?(n?y(e).empty=!1:y(e).unusedTokens.push(a),d=a,m=e,null!=(p=n)&&v(he,d)&&he[d](p,m._a,m,d)):e._strict&&!n&&y(e).unusedTokens.push(a);y(e).charsLeftOver=s-u,0<o.length&&y(e).unusedInput.push(o),e._a[ye]<=12&&!0===y(e).bigHour&&0<e._a[ye]&&(y(e).bigHour=void 0),y(e).parsedDateParts=e._a.slice(0),y(e).meridiem=e._meridiem,e._a[ye]=(c=e._locale,l=e._a[ye],null==(f=e._meridiem)?l:null!=c.meridiemHour?c.meridiemHour(l,f):(null!=c.isPM&&((h=c.isPM(f))&&l<12&&(l+=12),h||12!==l||(l=0)),l)),mt(e),dt(e)}else St(e);else At(e);var c,l,f,h,d,p,m}function Tt(e){var t,n,r=e._i,a=e._f;return e._locale=e._locale||ht(e._l),null===r||void 0===a&&""===r?p({nullInput:!0}):("string"==typeof r&&(e._i=r=e._locale.preparse(r)),w(r)?new b(dt(r)):(o(r)?e._d=r:s(a)?function(e){var t,n,r,a,i;if(0===e._f.length)return y(e).invalidFormat=!0,e._d=new Date(NaN);for(a=0;a<e._f.length;a++)i=0,t=_({},e),null!=e._useUTC&&(t._useUTC=e._useUTC),t._f=e._f[a],Mt(t),d(t)&&(i+=y(t).charsLeftOver,i+=10*y(t).unusedTokens.length,y(t).score=i,(null==r||i<r)&&(r=i,n=t));f(e,n||t)}(e):a?Mt(e):i(n=(t=e)._i)?t._d=new Date(g.now()):o(n)?t._d=new Date(n.valueOf()):"string"==typeof n?function(e){var t=wt.exec(e._i);if(null!==t)return e._d=new Date(+t[1]);At(e),!1===e._isValid&&(delete e._isValid,St(e),!1===e._isValid&&(delete e._isValid,g.createFromInputFallback(e)))}(t):s(n)?(t._a=c(n.slice(0),function(e){return parseInt(e,10)}),mt(t)):u(n)?function(e){if(!e._d){var t=z(e._i);e._a=c([t.year,t.month,t.day||t.date,t.hour,t.minute,t.second,t.millisecond],function(e){return e&&parseInt(e,10)}),mt(e)}}(t):l(n)?t._d=new Date(n):g.createFromInputFallback(t),d(e)||(e._d=null),e))}function Ct(e,t,n,r,a){var i,o={};return!0!==n&&!1!==n||(r=n,n=void 0),(u(e)&&function(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(e).length;var t;for(t in e)if(e.hasOwnProperty(t))return!1;return!0}(e)||s(e)&&0===e.length)&&(e=void 0),o._isAMomentObject=!0,o._useUTC=o._isUTC=a,o._l=n,o._i=e,o._f=t,o._strict=r,(i=new b(dt(Tt(o))))._nextDay&&(i.add(1,"d"),i._nextDay=void 0),i}function Dt(e,t,n,r){return Ct(e,t,n,r,!1)}g.createFromInputFallback=n("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(e){e._d=new Date(e._i+(e._useUTC?" UTC":""))}),g.ISO_8601=function(){},g.RFC_2822=function(){};var Ot=n("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var e=Dt.apply(null,arguments);return this.isValid()&&e.isValid()?e<this?this:e:p()}),jt=n("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var e=Dt.apply(null,arguments);return this.isValid()&&e.isValid()?this<e?this:e:p()});function Nt(e,t){var n,r;if(1===t.length&&s(t[0])&&(t=t[0]),!t.length)return Dt();for(n=t[0],r=1;r<t.length;++r)t[r].isValid()&&!t[r][e](n)||(n=t[r]);return n}var zt=["year","quarter","month","week","day","hour","minute","second","millisecond"];function Pt(e){var t=z(e),n=t.year||0,r=t.quarter||0,a=t.month||0,i=t.week||t.isoWeek||0,o=t.day||0,s=t.hour||0,u=t.minute||0,c=t.second||0,l=t.millisecond||0;this._isValid=function(e){for(var t in e)if(-1===Se.call(zt,t)||null!=e[t]&&isNaN(e[t]))return!1;for(var n=!1,r=0;r<zt.length;++r)if(e[zt[r]]){if(n)return!1;parseFloat(e[zt[r]])!==x(e[zt[r]])&&(n=!0)}return!0}(t),this._milliseconds=+l+1e3*c+6e4*u+1e3*s*60*60,this._days=+o+7*i,this._months=+a+3*r+12*n,this._data={},this._locale=ht(),this._bubble()}function Lt(e){return e instanceof Pt}function Rt(e){return e<0?-1*Math.round(-1*e):Math.round(e)}function Yt(e,n){F(e,0,0,function(){var e=this.utcOffset(),t="+";return e<0&&(e=-e,t="-"),t+Y(~~(e/60),2)+n+Y(~~e%60,2)})}Yt("Z",":"),Yt("ZZ",""),ce("Z",oe),ce("ZZ",oe),de(["Z","ZZ"],function(e,t,n){n._useUTC=!0,n._tzm=qt(oe,e)});var Wt=/([\+\-]|\d\d)/gi;function qt(e,t){var n=(t||"").match(e);if(null===n)return null;var r=n[n.length-1]||[],a=(r+"").match(Wt)||["-",0,0],i=60*a[1]+x(a[2]);return 0===i?0:"+"===a[0]?i:-i}function It(e,t){var n,r;return t._isUTC?(n=t.clone(),r=(w(e)||o(e)?e.valueOf():Dt(e).valueOf())-n.valueOf(),n._d.setTime(n._d.valueOf()+r),g.updateOffset(n,!1),n):Dt(e).local()}function Ht(e){return 15*-Math.round(e._d.getTimezoneOffset()/15)}function Ft(){return!!this.isValid()&&this._isUTC&&0===this._offset}g.updateOffset=function(){};var Bt=/^(\-|\+)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,Gt=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Ut(e,t){var n,r,a,i,o,s,u=e,c=null;return Lt(e)?u={ms:e._milliseconds,d:e._days,M:e._months}:l(e)?(u={},t?u[t]=e:u.milliseconds=e):(c=Bt.exec(e))?(n="-"===c[1]?-1:1,u={y:0,d:x(c[ve])*n,h:x(c[ye])*n,m:x(c[_e])*n,s:x(c[be])*n,ms:x(Rt(1e3*c[we]))*n}):(c=Gt.exec(e))?(n="-"===c[1]?-1:1,u={y:$t(c[2],n),M:$t(c[3],n),w:$t(c[4],n),d:$t(c[5],n),h:$t(c[6],n),m:$t(c[7],n),s:$t(c[8],n)}):null==u?u={}:"object"==typeof u&&("from"in u||"to"in u)&&(i=Dt(u.from),o=Dt(u.to),a=i.isValid()&&o.isValid()?(o=It(o,i),i.isBefore(o)?s=Vt(i,o):((s=Vt(o,i)).milliseconds=-s.milliseconds,s.months=-s.months),s):{milliseconds:0,months:0},(u={}).ms=a.milliseconds,u.M=a.months),r=new Pt(u),Lt(e)&&v(e,"_locale")&&(r._locale=e._locale),r}function $t(e,t){var n=e&&parseFloat(e.replace(",","."));return(isNaN(n)?0:n)*t}function Vt(e,t){var n={milliseconds:0,months:0};return n.months=t.month()-e.month()+12*(t.year()-e.year()),e.clone().add(n.months,"M").isAfter(t)&&--n.months,n.milliseconds=+t-+e.clone().add(n.months,"M"),n}function Jt(r,a){return function(e,t){var n;return null===t||isNaN(+t)||(M(a,"moment()."+a+"(period, number) is deprecated. Please use moment()."+a+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),n=e,e=t,t=n),Kt(this,Ut(e="string"==typeof e?+e:e,t),r),this}}function Kt(e,t,n,r){var a=t._milliseconds,i=Rt(t._days),o=Rt(t._months);e.isValid()&&(r=null==r||r,o&&Le(e,Ce(e,"Month")+o*n),i&&De(e,"Date",Ce(e,"Date")+i*n),a&&e._d.setTime(e._d.valueOf()+a*n),r&&g.updateOffset(e,i||o))}Ut.fn=Pt.prototype,Ut.invalid=function(){return Ut(NaN)};var Xt=Jt(1,"add"),Zt=Jt(-1,"subtract");function Qt(e,t){var n,r,a=12*(t.year()-e.year())+(t.month()-e.month()),i=e.clone().add(a,"months");return r=t-i<0?(n=e.clone().add(a-1,"months"),(t-i)/(i-n)):(n=e.clone().add(a+1,"months"),(t-i)/(n-i)),-(a+r)||0}function en(e){var t;return void 0===e?this._locale._abbr:(null!=(t=ht(e))&&(this._locale=t),this)}g.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",g.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var tn=n("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(e){return void 0===e?this.localeData():this.locale(e)});function nn(){return this._locale}function rn(e,t){F(0,[e,e.length],0,t)}function an(e,t,n,r,a){var i;return null==e?Be(this,r,a).year:((i=Ge(e,r,a))<t&&(t=i),function(e,t,n,r,a){var i=Fe(e,t,n,r,a),o=Ie(i.year,0,i.dayOfYear);return this.year(o.getUTCFullYear()),this.month(o.getUTCMonth()),this.date(o.getUTCDate()),this}.call(this,e,t,n,r,a))}F(0,["gg",2],0,function(){return this.weekYear()%100}),F(0,["GG",2],0,function(){return this.isoWeekYear()%100}),rn("gggg","weekYear"),rn("ggggg","weekYear"),rn("GGGG","isoWeekYear"),rn("GGGGG","isoWeekYear"),j("weekYear","gg"),j("isoWeekYear","GG"),L("weekYear",1),L("isoWeekYear",1),ce("G",ae),ce("g",ae),ce("GG",X,$),ce("gg",X,$),ce("GGGG",te,J),ce("gggg",te,J),ce("GGGGG",ne,K),ce("ggggg",ne,K),pe(["gggg","ggggg","GGGG","GGGGG"],function(e,t,n,r){t[r.substr(0,2)]=x(e)}),pe(["gg","GG"],function(e,t,n,r){t[r]=g.parseTwoDigitYear(e)}),F("Q",0,"Qo","quarter"),j("quarter","Q"),L("quarter",7),ce("Q",U),de("Q",function(e,t){t[ge]=3*(x(e)-1)}),F("D",["DD",2],"Do","date"),j("date","D"),L("date",9),ce("D",X),ce("DD",X,$),ce("Do",function(e,t){return e?t._dayOfMonthOrdinalParse||t._ordinalParse:t._dayOfMonthOrdinalParseLenient}),de(["D","DD"],ve),de("Do",function(e,t){t[ve]=x(e.match(X)[0])});var on=Te("Date",!0);F("DDD",["DDDD",3],"DDDo","dayOfYear"),j("dayOfYear","DDD"),L("dayOfYear",4),ce("DDD",ee),ce("DDDD",V),de(["DDD","DDDD"],function(e,t,n){n._dayOfYear=x(e)}),F("m",["mm",2],0,"minute"),j("minute","m"),L("minute",14),ce("m",X),ce("mm",X,$),de(["m","mm"],_e);var sn=Te("Minutes",!1);F("s",["ss",2],0,"second"),j("second","s"),L("second",15),ce("s",X),ce("ss",X,$),de(["s","ss"],be);var un,cn=Te("Seconds",!1);for(F("S",0,0,function(){return~~(this.millisecond()/100)}),F(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),F(0,["SSS",3],0,"millisecond"),F(0,["SSSS",4],0,function(){return 10*this.millisecond()}),F(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),F(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),F(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),F(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),F(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),j("millisecond","ms"),L("millisecond",16),ce("S",ee,U),ce("SS",ee,$),ce("SSS",ee,V),un="SSSS";un.length<=9;un+="S")ce(un,re);function ln(e,t){t[we]=x(1e3*("0."+e))}for(un="S";un.length<=9;un+="S")de(un,ln);var fn=Te("Milliseconds",!1);F("z",0,0,"zoneAbbr"),F("zz",0,0,"zoneName");var hn=b.prototype;function dn(e){return e}hn.add=Xt,hn.calendar=function(e,t){var n=e||Dt(),r=It(n,this).startOf("day"),a=g.calendarFormat(this,r)||"sameElse",i=t&&(T(t[a])?t[a].call(this,n):t[a]);return this.format(i||this.localeData().calendar(a,this,Dt(n)))},hn.clone=function(){return new b(this)},hn.diff=function(e,t,n){var r,a,i;if(!this.isValid())return NaN;if(!(r=It(e,this)).isValid())return NaN;switch(a=6e4*(r.utcOffset()-this.utcOffset()),t=N(t)){case"year":i=Qt(this,r)/12;break;case"month":i=Qt(this,r);break;case"quarter":i=Qt(this,r)/3;break;case"second":i=(this-r)/1e3;break;case"minute":i=(this-r)/6e4;break;case"hour":i=(this-r)/36e5;break;case"day":i=(this-r-a)/864e5;break;case"week":i=(this-r-a)/6048e5;break;default:i=this-r}return n?i:A(i)},hn.endOf=function(e){return void 0===(e=N(e))||"millisecond"===e?this:("date"===e&&(e="day"),this.startOf(e).add(1,"isoWeek"===e?"week":e).subtract(1,"ms"))},hn.format=function(e){e||(e=this.isUtc()?g.defaultFormatUtc:g.defaultFormat);var t=B(this,e);return this.localeData().postformat(t)},hn.from=function(e,t){return this.isValid()&&(w(e)&&e.isValid()||Dt(e).isValid())?Ut({to:this,from:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()},hn.fromNow=function(e){return this.from(Dt(),e)},hn.to=function(e,t){return this.isValid()&&(w(e)&&e.isValid()||Dt(e).isValid())?Ut({from:this,to:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()},hn.toNow=function(e){return this.to(Dt(),e)},hn.get=function(e){return T(this[e=N(e)])?this[e]():this},hn.invalidAt=function(){return y(this).overflow},hn.isAfter=function(e,t){var n=w(e)?e:Dt(e);return!(!this.isValid()||!n.isValid())&&("millisecond"===(t=N(t)||"millisecond")?this.valueOf()>n.valueOf():n.valueOf()<this.clone().startOf(t).valueOf())},hn.isBefore=function(e,t){var n=w(e)?e:Dt(e);return!(!this.isValid()||!n.isValid())&&("millisecond"===(t=N(t)||"millisecond")?this.valueOf()<n.valueOf():this.clone().endOf(t).valueOf()<n.valueOf())},hn.isBetween=function(e,t,n,r){var a=w(e)?e:Dt(e),i=w(t)?t:Dt(t);return!!(this.isValid()&&a.isValid()&&i.isValid())&&("("===(r=r||"()")[0]?this.isAfter(a,n):!this.isBefore(a,n))&&(")"===r[1]?this.isBefore(i,n):!this.isAfter(i,n))},hn.isSame=function(e,t){var n,r=w(e)?e:Dt(e);return!(!this.isValid()||!r.isValid())&&("millisecond"===(t=N(t)||"millisecond")?this.valueOf()===r.valueOf():(n=r.valueOf(),this.clone().startOf(t).valueOf()<=n&&n<=this.clone().endOf(t).valueOf()))},hn.isSameOrAfter=function(e,t){return this.isSame(e,t)||this.isAfter(e,t)},hn.isSameOrBefore=function(e,t){return this.isSame(e,t)||this.isBefore(e,t)},hn.isValid=function(){return d(this)},hn.lang=tn,hn.locale=en,hn.localeData=nn,hn.max=jt,hn.min=Ot,hn.parsingFlags=function(){return f({},y(this))},hn.set=function(e,t){if("object"==typeof e)for(var n=R(e=z(e)),r=0;r<n.length;r++)this[n[r].unit](e[n[r].unit]);else if(T(this[e=N(e)]))return this[e](t);return this},hn.startOf=function(e){switch(e=N(e)){case"year":this.month(0);case"quarter":case"month":this.date(1);case"week":case"isoWeek":case"day":case"date":this.hours(0);case"hour":this.minutes(0);case"minute":this.seconds(0);case"second":this.milliseconds(0)}return"week"===e&&this.weekday(0),"isoWeek"===e&&this.isoWeekday(1),"quarter"===e&&this.month(3*Math.floor(this.month()/3)),this},hn.subtract=Zt,hn.toArray=function(){return[this.year(),this.month(),this.date(),this.hour(),this.minute(),this.second(),this.millisecond()]},hn.toObject=function(){return{years:this.year(),months:this.month(),date:this.date(),hours:this.hours(),minutes:this.minutes(),seconds:this.seconds(),milliseconds:this.milliseconds()}},hn.toDate=function(){return new Date(this.valueOf())},hn.toISOString=function(e){if(!this.isValid())return null;var t=!0!==e,n=t?this.clone().utc():this;return n.year()<0||9999<n.year()?B(n,t?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):T(Date.prototype.toISOString)?t?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",B(n,"Z")):B(n,t?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")},hn.inspect=function(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var e="moment",t="";this.isLocal()||(e=0===this.utcOffset()?"moment.utc":"moment.parseZone",t="Z");var n="["+e+'("]',r=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",a=t+'[")]';return this.format(n+r+"-MM-DD[T]HH:mm:ss.SSS"+a)},hn.toJSON=function(){return this.isValid()?this.toISOString():null},hn.toString=function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},hn.unix=function(){return Math.floor(this.valueOf()/1e3)},hn.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},hn.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},hn.year=Me,hn.isLeapYear=function(){return Ee(this.year())},hn.weekYear=function(e){return an.call(this,e,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)},hn.isoWeekYear=function(e){return an.call(this,e,this.isoWeek(),this.isoWeekday(),1,4)},hn.quarter=hn.quarters=function(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)},hn.month=Re,hn.daysInMonth=function(){return Oe(this.year(),this.month())},hn.week=hn.weeks=function(e){var t=this.localeData().week(this);return null==e?t:this.add(7*(e-t),"d")},hn.isoWeek=hn.isoWeeks=function(e){var t=Be(this,1,4).week;return null==e?t:this.add(7*(e-t),"d")},hn.weeksInYear=function(){var e=this.localeData()._week;return Ge(this.year(),e.dow,e.doy)},hn.isoWeeksInYear=function(){return Ge(this.year(),1,4)},hn.date=on,hn.day=hn.days=function(e){if(!this.isValid())return null!=e?this:NaN;var t,n,r=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=e?(t=e,n=this.localeData(),e="string"==typeof t?isNaN(t)?"number"!=typeof(t=n.weekdaysParse(t))?null:t:parseInt(t,10):t,this.add(e-r,"d")):r},hn.weekday=function(e){if(!this.isValid())return null!=e?this:NaN;var t=(this.day()+7-this.localeData()._week.dow)%7;return null==e?t:this.add(e-t,"d")},hn.isoWeekday=function(e){if(!this.isValid())return null!=e?this:NaN;if(null==e)return this.day()||7;var t,n,r=(t=e,n=this.localeData(),"string"!=typeof t?isNaN(t)?null:t:n.weekdaysParse(t)%7||7);return this.day(this.day()%7?r:r-7)},hn.dayOfYear=function(e){var t=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==e?t:this.add(e-t,"d")},hn.hour=hn.hours=at,hn.minute=hn.minutes=sn,hn.second=hn.seconds=cn,hn.millisecond=hn.milliseconds=fn,hn.utcOffset=function(e,t,n){var r,a=this._offset||0;if(!this.isValid())return null!=e?this:NaN;if(null==e)return this._isUTC?a:Ht(this);if("string"==typeof e){if(null===(e=qt(oe,e)))return this}else Math.abs(e)<16&&!n&&(e*=60);return!this._isUTC&&t&&(r=Ht(this)),this._offset=e,this._isUTC=!0,null!=r&&this.add(r,"m"),a!==e&&(!t||this._changeInProgress?Kt(this,Ut(e-a,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,g.updateOffset(this,!0),this._changeInProgress=null)),this},hn.utc=function(e){return this.utcOffset(0,e)},hn.local=function(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e&&this.subtract(Ht(this),"m")),this},hn.parseZone=function(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var e=qt(ie,this._i);null!=e?this.utcOffset(e):this.utcOffset(0,!0)}return this},hn.hasAlignedHourOffset=function(e){return!!this.isValid()&&(e=e?Dt(e).utcOffset():0,(this.utcOffset()-e)%60==0)},hn.isDST=function(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},hn.isLocal=function(){return!!this.isValid()&&!this._isUTC},hn.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},hn.isUtc=Ft,hn.isUTC=Ft,hn.zoneAbbr=function(){return this._isUTC?"UTC":""},hn.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},hn.dates=n("dates accessor is deprecated. Use date instead.",on),hn.months=n("months accessor is deprecated. Use month instead",Re),hn.years=n("years accessor is deprecated. Use year instead",Me),hn.zone=n("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",function(e,t){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()}),hn.isDSTShifted=n("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",function(){if(!i(this._isDSTShifted))return this._isDSTShifted;var e={};if(_(e,this),(e=Tt(e))._a){var t=e._isUTC?h(e._a):Dt(e._a);this._isDSTShifted=this.isValid()&&0<k(e._a,t.toArray())}else this._isDSTShifted=!1;return this._isDSTShifted});var pn=D.prototype;function mn(e,t,n,r){var a=ht(),i=h().set(r,t);return a[n](i,e)}function gn(e,t,n){if(l(e)&&(t=e,e=void 0),e=e||"",null!=t)return mn(e,t,n,"month");var r,a=[];for(r=0;r<12;r++)a[r]=mn(e,r,n,"month");return a}function vn(e,t,n,r){"boolean"==typeof e?l(t)&&(n=t,t=void 0):(t=e,e=!1,l(n=t)&&(n=t,t=void 0)),t=t||"";var a,i=ht(),o=e?i._week.dow:0;if(null!=n)return mn(t,(n+o)%7,r,"day");var s=[];for(a=0;a<7;a++)s[a]=mn(t,(a+o)%7,r,"day");return s}pn.calendar=function(e,t,n){var r=this._calendar[e]||this._calendar.sameElse;return T(r)?r.call(t,n):r},pn.longDateFormat=function(e){var t=this._longDateFormat[e],n=this._longDateFormat[e.toUpperCase()];return!t&&n?(this._longDateFormat[e]=n.replace(/MMMM|MM|DD|dddd/g,function(e){return e.slice(1)}),this._longDateFormat[e]):t},pn.invalidDate=function(){return this._invalidDate},pn.ordinal=function(e){return this._ordinal.replace("%d",e)},pn.preparse=dn,pn.postformat=dn,pn.relativeTime=function(e,t,n,r){var a=this._relativeTime[n];return T(a)?a(e,t,n,r):a.replace(/%d/i,e)},pn.pastFuture=function(e,t){var n=this._relativeTime[0<e?"future":"past"];return T(n)?n(t):n.replace(/%s/i,t)},pn.set=function(e){var t,n;for(n in e)T(t=e[n])?this[n]=t:this["_"+n]=t;this._config=e,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)},pn.months=function(e,t){return e?s(this._months)?this._months[e.month()]:this._months[(this._months.isFormat||je).test(t)?"format":"standalone"][e.month()]:s(this._months)?this._months:this._months.standalone},pn.monthsShort=function(e,t){return e?s(this._monthsShort)?this._monthsShort[e.month()]:this._monthsShort[je.test(t)?"format":"standalone"][e.month()]:s(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},pn.monthsParse=function(e,t,n){var r,a,i;if(this._monthsParseExact)return Pe.call(this,e,t,n);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),r=0;r<12;r++){if(a=h([2e3,r]),n&&!this._longMonthsParse[r]&&(this._longMonthsParse[r]=new RegExp("^"+this.months(a,"").replace(".","")+"$","i"),this._shortMonthsParse[r]=new RegExp("^"+this.monthsShort(a,"").replace(".","")+"$","i")),n||this._monthsParse[r]||(i="^"+this.months(a,"")+"|^"+this.monthsShort(a,""),this._monthsParse[r]=new RegExp(i.replace(".",""),"i")),n&&"MMMM"===t&&this._longMonthsParse[r].test(e))return r;if(n&&"MMM"===t&&this._shortMonthsParse[r].test(e))return r;if(!n&&this._monthsParse[r].test(e))return r}},pn.monthsRegex=function(e){return this._monthsParseExact?(v(this,"_monthsRegex")||qe.call(this),e?this._monthsStrictRegex:this._monthsRegex):(v(this,"_monthsRegex")||(this._monthsRegex=We),this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex)},pn.monthsShortRegex=function(e){return this._monthsParseExact?(v(this,"_monthsRegex")||qe.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):(v(this,"_monthsShortRegex")||(this._monthsShortRegex=Ye),this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex)},pn.week=function(e){return Be(e,this._week.dow,this._week.doy).week},pn.firstDayOfYear=function(){return this._week.doy},pn.firstDayOfWeek=function(){return this._week.dow},pn.weekdays=function(e,t){return e?s(this._weekdays)?this._weekdays[e.day()]:this._weekdays[this._weekdays.isFormat.test(t)?"format":"standalone"][e.day()]:s(this._weekdays)?this._weekdays:this._weekdays.standalone},pn.weekdaysMin=function(e){return e?this._weekdaysMin[e.day()]:this._weekdaysMin},pn.weekdaysShort=function(e){return e?this._weekdaysShort[e.day()]:this._weekdaysShort},pn.weekdaysParse=function(e,t,n){var r,a,i;if(this._weekdaysParseExact)return Je.call(this,e,t,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),r=0;r<7;r++){if(a=h([2e3,1]).day(r),n&&!this._fullWeekdaysParse[r]&&(this._fullWeekdaysParse[r]=new RegExp("^"+this.weekdays(a,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[r]=new RegExp("^"+this.weekdaysShort(a,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[r]=new RegExp("^"+this.weekdaysMin(a,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[r]||(i="^"+this.weekdays(a,"")+"|^"+this.weekdaysShort(a,"")+"|^"+this.weekdaysMin(a,""),this._weekdaysParse[r]=new RegExp(i.replace(".",""),"i")),n&&"dddd"===t&&this._fullWeekdaysParse[r].test(e))return r;if(n&&"ddd"===t&&this._shortWeekdaysParse[r].test(e))return r;if(n&&"dd"===t&&this._minWeekdaysParse[r].test(e))return r;if(!n&&this._weekdaysParse[r].test(e))return r}},pn.weekdaysRegex=function(e){return this._weekdaysParseExact?(v(this,"_weekdaysRegex")||Qe.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(v(this,"_weekdaysRegex")||(this._weekdaysRegex=Ke),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)},pn.weekdaysShortRegex=function(e){return this._weekdaysParseExact?(v(this,"_weekdaysRegex")||Qe.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(v(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Xe),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},pn.weekdaysMinRegex=function(e){return this._weekdaysParseExact?(v(this,"_weekdaysRegex")||Qe.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(v(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Ze),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},pn.isPM=function(e){return"p"===(e+"").toLowerCase().charAt(0)},pn.meridiem=function(e,t,n){return 11<e?n?"pm":"PM":n?"am":"AM"},lt("en",{dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10,n=1===x(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th";return e+n}}),g.lang=n("moment.lang is deprecated. Use moment.locale instead.",lt),g.langData=n("moment.langData is deprecated. Use moment.localeData instead.",ht);var yn=Math.abs;function _n(e,t,n,r){var a=Ut(t,n);return e._milliseconds+=r*a._milliseconds,e._days+=r*a._days,e._months+=r*a._months,e._bubble()}function bn(e){return e<0?Math.floor(e):Math.ceil(e)}function wn(e){return 4800*e/146097}function An(e){return 146097*e/4800}function xn(e){return function(){return this.as(e)}}var kn=xn("ms"),En=xn("s"),Sn=xn("m"),Mn=xn("h"),Tn=xn("d"),Cn=xn("w"),Dn=xn("M"),On=xn("y");function jn(e){return function(){return this.isValid()?this._data[e]:NaN}}var Nn=jn("milliseconds"),zn=jn("seconds"),Pn=jn("minutes"),Ln=jn("hours"),Rn=jn("days"),Yn=jn("months"),Wn=jn("years"),qn=Math.round,In={ss:44,s:45,m:45,h:22,d:26,M:11},Hn=Math.abs;function Fn(e){return(0<e)-(e<0)||+e}function Bn(){if(!this.isValid())return this.localeData().invalidDate();var e,t,n=Hn(this._milliseconds)/1e3,r=Hn(this._days),a=Hn(this._months);e=A(n/60),t=A(e/60),n%=60,e%=60;var i=A(a/12),o=a%=12,s=r,u=t,c=e,l=n?n.toFixed(3).replace(/\.?0+$/,""):"",f=this.asSeconds();if(!f)return"P0D";var h=f<0?"-":"",d=Fn(this._months)!==Fn(f)?"-":"",p=Fn(this._days)!==Fn(f)?"-":"",m=Fn(this._milliseconds)!==Fn(f)?"-":"";return h+"P"+(i?d+i+"Y":"")+(o?d+o+"M":"")+(s?p+s+"D":"")+(u||c||l?"T":"")+(u?m+u+"H":"")+(c?m+c+"M":"")+(l?m+l+"S":"")}var Gn=Pt.prototype;return Gn.isValid=function(){return this._isValid},Gn.abs=function(){var e=this._data;return this._milliseconds=yn(this._milliseconds),this._days=yn(this._days),this._months=yn(this._months),e.milliseconds=yn(e.milliseconds),e.seconds=yn(e.seconds),e.minutes=yn(e.minutes),e.hours=yn(e.hours),e.months=yn(e.months),e.years=yn(e.years),this},Gn.add=function(e,t){return _n(this,e,t,1)},Gn.subtract=function(e,t){return _n(this,e,t,-1)},Gn.as=function(e){if(!this.isValid())return NaN;var t,n,r=this._milliseconds;if("month"===(e=N(e))||"year"===e)return t=this._days+r/864e5,n=this._months+wn(t),"month"===e?n:n/12;switch(t=this._days+Math.round(An(this._months)),e){case"week":return t/7+r/6048e5;case"day":return t+r/864e5;case"hour":return 24*t+r/36e5;case"minute":return 1440*t+r/6e4;case"second":return 86400*t+r/1e3;case"millisecond":return Math.floor(864e5*t)+r;default:throw new Error("Unknown unit "+e)}},Gn.asMilliseconds=kn,Gn.asSeconds=En,Gn.asMinutes=Sn,Gn.asHours=Mn,Gn.asDays=Tn,Gn.asWeeks=Cn,Gn.asMonths=Dn,Gn.asYears=On,Gn.valueOf=function(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*x(this._months/12):NaN},Gn._bubble=function(){var e,t,n,r,a,i=this._milliseconds,o=this._days,s=this._months,u=this._data;return 0<=i&&0<=o&&0<=s||i<=0&&o<=0&&s<=0||(i+=864e5*bn(An(s)+o),s=o=0),u.milliseconds=i%1e3,e=A(i/1e3),u.seconds=e%60,t=A(e/60),u.minutes=t%60,n=A(t/60),u.hours=n%24,o+=A(n/24),a=A(wn(o)),s+=a,o-=bn(An(a)),r=A(s/12),s%=12,u.days=o,u.months=s,u.years=r,this},Gn.clone=function(){return Ut(this)},Gn.get=function(e){return e=N(e),this.isValid()?this[e+"s"]():NaN},Gn.milliseconds=Nn,Gn.seconds=zn,Gn.minutes=Pn,Gn.hours=Ln,Gn.days=Rn,Gn.weeks=function(){return A(this.days()/7)},Gn.months=Yn,Gn.years=Wn,Gn.humanize=function(e){if(!this.isValid())return this.localeData().invalidDate();var t,n,r,a,i,o,s,u,c,l,f,h=this.localeData(),d=(n=!e,r=h,a=Ut(t=this).abs(),i=qn(a.as("s")),o=qn(a.as("m")),s=qn(a.as("h")),u=qn(a.as("d")),c=qn(a.as("M")),l=qn(a.as("y")),(f=i<=In.ss&&["s",i]||i<In.s&&["ss",i]||o<=1&&["m"]||o<In.m&&["mm",o]||s<=1&&["h"]||s<In.h&&["hh",s]||u<=1&&["d"]||u<In.d&&["dd",u]||c<=1&&["M"]||c<In.M&&["MM",c]||l<=1&&["y"]||["yy",l])[2]=n,f[3]=0<+t,f[4]=r,function(e,t,n,r,a){return a.relativeTime(t||1,!!n,e,r)}.apply(null,f));return e&&(d=h.pastFuture(+this,d)),h.postformat(d)},Gn.toISOString=Bn,Gn.toString=Bn,Gn.toJSON=Bn,Gn.locale=en,Gn.localeData=nn,Gn.toIsoString=n("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Bn),Gn.lang=tn,F("X",0,0,"unix"),F("x",0,0,"valueOf"),ce("x",ae),ce("X",/[+-]?\d+(\.\d{1,3})?/),de("X",function(e,t,n){n._d=new Date(1e3*parseFloat(e,10))}),de("x",function(e,t,n){n._d=new Date(x(e))}),g.version="2.23.0",e=Dt,g.fn=hn,g.min=function(){return Nt("isBefore",[].slice.call(arguments,0))},g.max=function(){return Nt("isAfter",[].slice.call(arguments,0))},g.now=function(){return Date.now?Date.now():+new Date},g.utc=h,g.unix=function(e){return Dt(1e3*e)},g.months=function(e,t){return gn(e,t,"months")},g.isDate=o,g.locale=lt,g.invalid=p,g.duration=Ut,g.isMoment=w,g.weekdays=function(e,t,n){return vn(e,t,n,"weekdays")},g.parseZone=function(){return Dt.apply(null,arguments).parseZone()},g.localeData=ht,g.isDuration=Lt,g.monthsShort=function(e,t){return gn(e,t,"monthsShort")},g.weekdaysMin=function(e,t,n){return vn(e,t,n,"weekdaysMin")},g.defineLocale=ft,g.updateLocale=function(e,t){if(null!=t){var n,r,a=it;null!=(r=ct(e))&&(a=r._config),t=C(a,t),(n=new D(t)).parentLocale=ot[e],ot[e]=n,lt(e)}else null!=ot[e]&&(null!=ot[e].parentLocale?ot[e]=ot[e].parentLocale:null!=ot[e]&&delete ot[e]);return ot[e]},g.locales=function(){return r(ot)},g.weekdaysShort=function(e,t,n){return vn(e,t,n,"weekdaysShort")},g.normalizeUnits=N,g.relativeTimeRounding=function(e){return void 0!==e?"function"==typeof e&&(qn=e,!0):qn},g.relativeTimeThreshold=function(e,t){return void 0!==In[e]&&(void 0===t?In[e]:(In[e]=t,"s"===e&&(In.ss=t-1),!0))},g.calendarFormat=function(e,t){var n=e.diff(t,"days",!0);return n<-6?"sameElse":n<-1?"lastWeek":n<0?"lastDay":n<1?"sameDay":n<2?"nextDay":n<7?"nextWeek":"sameElse"},g.prototype=hn,g.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},g}()}),Xs=e(function(e){var t,n;t=this,n=function(i){var t,o={},s={},c={},l={};i&&"string"==typeof i.version||S("Moment Timezone requires Moment.js. See https://momentjs.com/timezone/docs/#/use-it/browser/");var e=i.version.split("."),n=+e[0],r=+e[1];function u(e){return 96<e?e-87:64<e?e-29:e-48}function a(e){var t=0,n=e.split("."),r=n[0],a=n[1]||"",i=1,o=0,s=1;for(45===e.charCodeAt(0)&&(s=-(t=1));t<r.length;t++)o=60*o+u(r.charCodeAt(t));for(t=0;t<a.length;t++)i/=60,o+=u(a.charCodeAt(t))*i;return o*s}function f(e){for(var t=0;t<e.length;t++)e[t]=a(e[t])}function h(e,t){var n,r=[];for(n=0;n<t.length;n++)r[n]=e[t[n]];return r}function d(e){var t=e.split("|"),n=t[2].split(" "),r=t[3].split(""),a=t[4].split(" ");return f(n),f(r),f(a),function(e,t){for(var n=0;n<t;n++)e[n]=Math.round((e[n-1]||0)+6e4*e[n]);e[t-1]=1/0}(a,r.length),{name:t[0],abbrs:h(t[1].split(" "),r),offsets:h(n,r),untils:a,population:0|t[5]}}function p(e){e&&this._set(d(e))}function m(e){var t=e.toTimeString(),n=t.match(/\([a-z ]+\)/i);"GMT"===(n=n&&n[0]?(n=n[0].match(/[A-Z]/g))?n.join(""):void 0:(n=t.match(/[A-Z]{3,5}/g))?n[0]:void 0)&&(n=void 0),this.at=+e,this.abbr=n,this.offset=e.getTimezoneOffset()}function g(e){this.zone=e,this.offsetScore=0,this.abbrScore=0}function v(e,t){for(var n,r;r=6e4*((t.at-e.at)/12e4|0);)(n=new m(new Date(e.at+r))).offset===e.offset?e=n:t=n;return e}function y(e,t){return e.offsetScore!==t.offsetScore?e.offsetScore-t.offsetScore:e.abbrScore!==t.abbrScore?e.abbrScore-t.abbrScore:t.zone.population-e.zone.population}function _(e,t){var n,r;for(f(t),n=0;n<t.length;n++)r=t[n],l[r]=l[r]||{},l[r][e]=!0}function b(e){return(e||"").toLowerCase().replace(/\//g,"_")}function w(e){var t,n,r,a;for("string"==typeof e&&(e=[e]),t=0;t<e.length;t++)a=b(n=(r=e[t].split("|"))[0]),o[a]=e[t],c[a]=n,_(a,r[2].split(" "))}function A(e,t){e=b(e);var n,r=o[e];return r instanceof p?r:"string"==typeof r?(r=new p(r),o[e]=r):s[e]&&t!==A&&(n=A(s[e],A))?((r=o[e]=new p)._set(n),r.name=c[e],r):null}function x(e){var t,n,r,a;for("string"==typeof e&&(e=[e]),t=0;t<e.length;t++)r=b((n=e[t].split("|"))[0]),a=b(n[1]),s[r]=a,c[r]=n[0],s[a]=r,c[a]=n[1]}function k(e){w(e.zones),x(e.links),M.dataVersion=e.version}function E(e){var t="X"===e._f||"x"===e._f;return!(!e._a||void 0!==e._tzm||t)}function S(e){"undefined"!=typeof console&&"function"==typeof console.error&&console.error(e)}function M(e){var t=Array.prototype.slice.call(arguments,0,-1),n=arguments[arguments.length-1],r=A(n),a=i.utc.apply(null,t);return r&&!i.isMoment(e)&&E(a)&&a.add(r.parse(a),"minutes"),a.tz(n),a}(n<2||2==n&&r<6)&&S("Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js "+i.version+". See momentjs.com"),p.prototype={_set:function(e){this.name=e.name,this.abbrs=e.abbrs,this.untils=e.untils,this.offsets=e.offsets,this.population=e.population},_index:function(e){var t,n=+e,r=this.untils;for(t=0;t<r.length;t++)if(n<r[t])return t},parse:function(e){var t,n,r,a,i=+e,o=this.offsets,s=this.untils,u=s.length-1;for(a=0;a<u;a++)if(t=o[a],n=o[a+1],r=o[a?a-1:a],t<n&&M.moveAmbiguousForward?t=n:r<t&&M.moveInvalidForward&&(t=r),i<s[a]-6e4*t)return o[a];return o[u]},abbr:function(e){return this.abbrs[this._index(e)]},offset:function(e){return S("zone.offset has been deprecated in favor of zone.utcOffset"),this.offsets[this._index(e)]},utcOffset:function(e){return this.offsets[this._index(e)]}},g.prototype.scoreOffsetAt=function(e){this.offsetScore+=Math.abs(this.zone.utcOffset(e.at)-e.offset),this.zone.abbr(e.at).replace(/[^A-Z]/g,"")!==e.abbr&&this.abbrScore++},M.version="0.5.26",M.dataVersion="",M._zones=o,M._links=s,M._names=c,M.add=w,M.link=x,M.load=k,M.zone=A,M.zoneExists=function e(t){return e.didShowError||(e.didShowError=!0,S("moment.tz.zoneExists('"+t+"') has been deprecated in favor of !moment.tz.zone('"+t+"')")),!!A(t)},M.guess=function(e){return t&&!e||(t=function(){try{var e=Intl.DateTimeFormat().resolvedOptions().timeZone;if(e&&3<e.length){var t=c[b(e)];if(t)return t;S("Moment Timezone found "+e+" from the Intl api, but did not have that data loaded.")}}catch(e){}var n,r,a,i=function(){var e,t,n,r=(new Date).getFullYear()-2,a=new m(new Date(r,0,1)),i=[a];for(n=1;n<48;n++)(t=new m(new Date(r,n,1))).offset!==a.offset&&(e=v(a,t),i.push(e),i.push(new m(new Date(e.at+6e4)))),a=t;for(n=0;n<4;n++)i.push(new m(new Date(r+n,0,1))),i.push(new m(new Date(r+n,6,1)));return i}(),o=i.length,s=function(e){var t,n,r,a=e.length,i={},o=[];for(t=0;t<a;t++)for(n in r=l[e[t].offset]||{})r.hasOwnProperty(n)&&(i[n]=!0);for(t in i)i.hasOwnProperty(t)&&o.push(c[t]);return o}(i),u=[];for(r=0;r<s.length;r++){for(n=new g(A(s[r]),o),a=0;a<o;a++)n.scoreOffsetAt(i[a]);u.push(n)}return u.sort(y),0<u.length?u[0].zone.name:void 0}()),t},M.names=function(){var e,t=[];for(e in c)c.hasOwnProperty(e)&&(o[e]||o[s[e]])&&c[e]&&t.push(c[e]);return t.sort()},M.Zone=p,M.unpack=d,M.unpackBase60=a,M.needsOffset=E,M.moveInvalidForward=!0,M.moveAmbiguousForward=!1;var T,C=i.fn;function D(e){return function(){return this._z?this._z.abbr(this):e.call(this)}}function O(e){return function(){return this._z=null,e.apply(this,arguments)}}i.tz=M,i.defaultZone=null,i.updateOffset=function(e,t){var n,r=i.defaultZone;if(void 0===e._z&&(r&&E(e)&&!e._isUTC&&(e._d=i.utc(e._a)._d,e.utc().add(r.parse(e),"minutes")),e._z=r),e._z)if(n=e._z.utcOffset(e),Math.abs(n)<16&&(n/=60),void 0!==e.utcOffset){var a=e._z;e.utcOffset(-n,t),e._z=a}else e.zone(n,t)},C.tz=function(e,t){if(e){if("string"!=typeof e)throw new Error("Time zone name must be a string, got "+e+" ["+typeof e+"]");return this._z=A(e),this._z?i.updateOffset(this,t):S("Moment Timezone has no data for "+e+". See http://momentjs.com/timezone/docs/#/data-loading/."),this}if(this._z)return this._z.name},C.zoneName=D(C.zoneName),C.zoneAbbr=D(C.zoneAbbr),C.utc=O(C.utc),C.local=O(C.local),C.utcOffset=(T=C.utcOffset,function(){return 0<arguments.length&&(this._z=null),T.apply(this,arguments)}),i.tz.setDefault=function(e){return(n<2||2==n&&r<9)&&S("Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js "+i.version+"."),i.defaultZone=e?A(e):null,i};var j=i.momentProperties;return"[object Array]"===Object.prototype.toString.call(j)?(j.push("_z"),j.push("_a")):j&&(j._z=null),k({version:"2019b",zones:["Africa/Abidjan|GMT|0|0||48e5","Africa/Nairobi|EAT|-30|0||47e5","Africa/Algiers|CET|-10|0||26e5","Africa/Lagos|WAT|-10|0||17e6","Africa/Maputo|CAT|-20|0||26e5","Africa/Cairo|EET EEST|-20 -30|01010|1M2m0 gL0 e10 mn0|15e6","Africa/Casablanca|+00 +01|0 -10|010101010101010101010101010101010101|1H3C0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 28M0 e00 2600 e00 28M0 e00 2600 gM0|32e5","Europe/Paris|CET CEST|-10 -20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|11e6","Africa/Johannesburg|SAST|-20|0||84e5","Africa/Khartoum|EAT CAT|-30 -20|01|1Usl0|51e5","Africa/Sao_Tome|GMT WAT|0 -10|010|1UQN0 2q00","Africa/Tripoli|EET CET CEST|-20 -10 -20|0120|1IlA0 TA0 1o00|11e5","Africa/Windhoek|CAT WAT|-20 -10|0101010101010|1GQo0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0|32e4","America/Adak|HST HDT|a0 90|01010101010101010101010|1GIc0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|326","America/Anchorage|AKST AKDT|90 80|01010101010101010101010|1GIb0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|30e4","America/Santo_Domingo|AST|40|0||29e5","America/Araguaina|-03 -02|30 20|010|1IdD0 Lz0|14e4","America/Fortaleza|-03|30|0||34e5","America/Asuncion|-03 -04|30 40|01010101010101010101010|1GTf0 1cN0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0|28e5","America/Panama|EST|50|0||15e5","America/Mexico_City|CST CDT|60 50|01010101010101010101010|1GQw0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|20e6","America/Bahia|-02 -03|20 30|01|1GCq0|27e5","America/Managua|CST|60|0||22e5","America/La_Paz|-04|40|0||19e5","America/Lima|-05|50|0||11e6","America/Denver|MST MDT|70 60|01010101010101010101010|1GI90 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|26e5","America/Campo_Grande|-03 -04|30 40|0101010101010101|1GCr0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|77e4","America/Cancun|CST CDT EST|60 50 50|01010102|1GQw0 1nX0 14p0 1lb0 14p0 1lb0 Dd0|63e4","America/Caracas|-0430 -04|4u 40|01|1QMT0|29e5","America/Chicago|CST CDT|60 50|01010101010101010101010|1GI80 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|92e5","America/Chihuahua|MST MDT|70 60|01010101010101010101010|1GQx0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|81e4","America/Phoenix|MST|70|0||42e5","America/Los_Angeles|PST PDT|80 70|01010101010101010101010|1GIa0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|15e6","America/New_York|EST EDT|50 40|01010101010101010101010|1GI70 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|21e6","America/Rio_Branco|-04 -05|40 50|01|1KLE0|31e4","America/Fort_Nelson|PST PDT MST|80 70 70|01010102|1GIa0 1zb0 Op0 1zb0 Op0 1zb0 Op0|39e2","America/Halifax|AST ADT|40 30|01010101010101010101010|1GI60 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|39e4","America/Godthab|-03 -02|30 20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|17e3","America/Grand_Turk|EST EDT AST|50 40 40|0101010121010101010|1GI70 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 5Ip0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|37e2","America/Havana|CST CDT|50 40|01010101010101010101010|1GQt0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0|21e5","America/Metlakatla|PST AKST AKDT|80 90 80|01212120121212121|1PAa0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 uM0 jB0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|14e2","America/Miquelon|-03 -02|30 20|01010101010101010101010|1GI50 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|61e2","America/Montevideo|-02 -03|20 30|01010101|1GI40 1o10 11z0 1o10 11z0 1o10 11z0|17e5","America/Noronha|-02|20|0||30e2","America/Port-au-Prince|EST EDT|50 40|010101010101010101010|1GI70 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 3iN0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|23e5","Antarctica/Palmer|-03 -04|30 40|010101010|1H3D0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|40","America/Santiago|-03 -04|30 40|010101010101010101010|1H3D0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0|62e5","America/Sao_Paulo|-02 -03|20 30|0101010101010101|1GCq0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|20e6","Atlantic/Azores|-01 +00|10 0|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|25e4","America/St_Johns|NST NDT|3u 2u|01010101010101010101010|1GI5u 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|11e4","Antarctica/Casey|+11 +08|-b0 -80|0101|1GAF0 blz0 3m10|10","Antarctica/Davis|+05 +07|-50 -70|01|1GAI0|70","Pacific/Port_Moresby|+10|-a0|0||25e4","Pacific/Guadalcanal|+11|-b0|0||11e4","Asia/Tashkent|+05|-50|0||23e5","Pacific/Auckland|NZDT NZST|-d0 -c0|01010101010101010101010|1GQe0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00|14e5","Asia/Baghdad|+03|-30|0||66e5","Antarctica/Troll|+00 +02|0 -20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|40","Asia/Dhaka|+06|-60|0||16e6","Asia/Amman|EET EEST|-20 -30|010101010101010101010|1GPy0 4bX0 Dd0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00|25e5","Asia/Kamchatka|+12|-c0|0||18e4","Asia/Baku|+04 +05|-40 -50|010101010|1GNA0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5","Asia/Bangkok|+07|-70|0||15e6","Asia/Barnaul|+07 +06|-70 -60|010|1N7v0 3rd0","Asia/Beirut|EET EEST|-20 -30|01010101010101010101010|1GNy0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0|22e5","Asia/Kuala_Lumpur|+08|-80|0||71e5","Asia/Kolkata|IST|-5u|0||15e6","Asia/Chita|+10 +08 +09|-a0 -80 -90|012|1N7s0 3re0|33e4","Asia/Ulaanbaatar|+08 +09|-80 -90|01010|1O8G0 1cJ0 1cP0 1cJ0|12e5","Asia/Shanghai|CST|-80|0||23e6","Asia/Colombo|+0530|-5u|0||22e5","Asia/Damascus|EET EEST|-20 -30|01010101010101010101010|1GPy0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0|26e5","Asia/Dili|+09|-90|0||19e4","Asia/Dubai|+04|-40|0||39e5","Asia/Famagusta|EET EEST +03|-20 -30 -30|0101010101201010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 15U0 2Ks0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0","Asia/Gaza|EET EEST|-20 -30|01010101010101010101010|1GPy0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nz0 1220 1qL0 WN0 1qL0 WN0 1qL0 11c0 1oo0 11c0 1rc0 Wo0 1rc0 Wo0 1rc0|18e5","Asia/Hong_Kong|HKT|-80|0||73e5","Asia/Hovd|+07 +08|-70 -80|01010|1O8H0 1cJ0 1cP0 1cJ0|81e3","Asia/Irkutsk|+09 +08|-90 -80|01|1N7t0|60e4","Europe/Istanbul|EET EEST +03|-20 -30 -30|01010101012|1GNB0 1qM0 11A0 1o00 1200 1nA0 11A0 1tA0 U00 15w0|13e6","Asia/Jakarta|WIB|-70|0||31e6","Asia/Jayapura|WIT|-90|0||26e4","Asia/Jerusalem|IST IDT|-20 -30|01010101010101010101010|1GPA0 1aL0 1eN0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0|81e4","Asia/Kabul|+0430|-4u|0||46e5","Asia/Karachi|PKT|-50|0||24e6","Asia/Kathmandu|+0545|-5J|0||12e5","Asia/Yakutsk|+10 +09|-a0 -90|01|1N7s0|28e4","Asia/Krasnoyarsk|+08 +07|-80 -70|01|1N7u0|10e5","Asia/Magadan|+12 +10 +11|-c0 -a0 -b0|012|1N7q0 3Cq0|95e3","Asia/Makassar|WITA|-80|0||15e5","Asia/Manila|PST|-80|0||24e6","Europe/Athens|EET EEST|-20 -30|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|35e5","Asia/Novosibirsk|+07 +06|-70 -60|010|1N7v0 4eN0|15e5","Asia/Omsk|+07 +06|-70 -60|01|1N7v0|12e5","Asia/Pyongyang|KST KST|-90 -8u|010|1P4D0 6BA0|29e5","Asia/Qyzylorda|+06 +05|-60 -50|01|1Xei0|73e4","Asia/Rangoon|+0630|-6u|0||48e5","Asia/Sakhalin|+11 +10|-b0 -a0|010|1N7r0 3rd0|58e4","Asia/Seoul|KST|-90|0||23e6","Asia/Srednekolymsk|+12 +11|-c0 -b0|01|1N7q0|35e2","Asia/Tehran|+0330 +0430|-3u -4u|01010101010101010101010|1GLUu 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0|14e6","Asia/Tokyo|JST|-90|0||38e6","Asia/Tomsk|+07 +06|-70 -60|010|1N7v0 3Qp0|10e5","Asia/Vladivostok|+11 +10|-b0 -a0|01|1N7r0|60e4","Asia/Yekaterinburg|+06 +05|-60 -50|01|1N7w0|14e5","Europe/Lisbon|WET WEST|0 -10|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|27e5","Atlantic/Cape_Verde|-01|10|0||50e4","Australia/Sydney|AEDT AEST|-b0 -a0|01010101010101010101010|1GQg0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|40e5","Australia/Adelaide|ACDT ACST|-au -9u|01010101010101010101010|1GQgu 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|11e5","Australia/Brisbane|AEST|-a0|0||20e5","Australia/Darwin|ACST|-9u|0||12e4","Australia/Eucla|+0845|-8J|0||368","Australia/Lord_Howe|+11 +1030|-b0 -au|01010101010101010101010|1GQf0 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu|347","Australia/Perth|AWST|-80|0||18e5","Pacific/Easter|-05 -06|50 60|010101010101010101010|1H3D0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0|30e2","Europe/Dublin|GMT IST|0 -10|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|12e5","Etc/GMT-1|+01|-10|0|","Pacific/Fakaofo|+13|-d0|0||483","Pacific/Kiritimati|+14|-e0|0||51e2","Etc/GMT-2|+02|-20|0|","Pacific/Tahiti|-10|a0|0||18e4","Pacific/Niue|-11|b0|0||12e2","Etc/GMT+12|-12|c0|0|","Pacific/Galapagos|-06|60|0||25e3","Etc/GMT+7|-07|70|0|","Pacific/Pitcairn|-08|80|0||56","Pacific/Gambier|-09|90|0||125","Etc/UTC|UTC|0|0|","Europe/Ulyanovsk|+04 +03|-40 -30|010|1N7y0 3rd0|13e5","Europe/London|GMT BST|0 -10|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|10e6","Europe/Chisinau|EET EEST|-20 -30|01010101010101010101010|1GNA0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|67e4","Europe/Kaliningrad|+03 EET|-30 -20|01|1N7z0|44e4","Europe/Kirov|+04 +03|-40 -30|01|1N7y0|48e4","Europe/Moscow|MSK MSK|-40 -30|01|1N7y0|16e6","Europe/Saratov|+04 +03|-40 -30|010|1N7y0 5810","Europe/Simferopol|EET EEST MSK MSK|-20 -30 -40 -30|0101023|1GNB0 1qM0 11A0 1o00 11z0 1nW0|33e4","Europe/Volgograd|+04 +03|-40 -30|010|1N7y0 9Jd0|10e5","Pacific/Honolulu|HST|a0|0||37e4","MET|MET MEST|-10 -20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0","Pacific/Chatham|+1345 +1245|-dJ -cJ|01010101010101010101010|1GQe0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00|600","Pacific/Apia|+14 +13|-e0 -d0|01010101010101010101010|1GQe0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00|37e3","Pacific/Bougainville|+10 +11|-a0 -b0|01|1NwE0|18e4","Pacific/Fiji|+13 +12|-d0 -c0|01010101010101010101010|1Goe0 1Nc0 Ao0 1Q00 xz0 1SN0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0|88e4","Pacific/Guam|ChST|-a0|0||17e4","Pacific/Marquesas|-0930|9u|0||86e2","Pacific/Pago_Pago|SST|b0|0||37e2","Pacific/Norfolk|+1130 +11|-bu -b0|01|1PoCu|25e4","Pacific/Tongatapu|+13 +14|-d0 -e0|010|1S4d0 s00|75e3"],links:["Africa/Abidjan|Africa/Accra","Africa/Abidjan|Africa/Bamako","Africa/Abidjan|Africa/Banjul","Africa/Abidjan|Africa/Bissau","Africa/Abidjan|Africa/Conakry","Africa/Abidjan|Africa/Dakar","Africa/Abidjan|Africa/Freetown","Africa/Abidjan|Africa/Lome","Africa/Abidjan|Africa/Monrovia","Africa/Abidjan|Africa/Nouakchott","Africa/Abidjan|Africa/Ouagadougou","Africa/Abidjan|Africa/Timbuktu","Africa/Abidjan|America/Danmarkshavn","Africa/Abidjan|Atlantic/Reykjavik","Africa/Abidjan|Atlantic/St_Helena","Africa/Abidjan|Etc/GMT","Africa/Abidjan|Etc/GMT+0","Africa/Abidjan|Etc/GMT-0","Africa/Abidjan|Etc/GMT0","Africa/Abidjan|Etc/Greenwich","Africa/Abidjan|GMT","Africa/Abidjan|GMT+0","Africa/Abidjan|GMT-0","Africa/Abidjan|GMT0","Africa/Abidjan|Greenwich","Africa/Abidjan|Iceland","Africa/Algiers|Africa/Tunis","Africa/Cairo|Egypt","Africa/Casablanca|Africa/El_Aaiun","Africa/Johannesburg|Africa/Maseru","Africa/Johannesburg|Africa/Mbabane","Africa/Lagos|Africa/Bangui","Africa/Lagos|Africa/Brazzaville","Africa/Lagos|Africa/Douala","Africa/Lagos|Africa/Kinshasa","Africa/Lagos|Africa/Libreville","Africa/Lagos|Africa/Luanda","Africa/Lagos|Africa/Malabo","Africa/Lagos|Africa/Ndjamena","Africa/Lagos|Africa/Niamey","Africa/Lagos|Africa/Porto-Novo","Africa/Maputo|Africa/Blantyre","Africa/Maputo|Africa/Bujumbura","Africa/Maputo|Africa/Gaborone","Africa/Maputo|Africa/Harare","Africa/Maputo|Africa/Kigali","Africa/Maputo|Africa/Lubumbashi","Africa/Maputo|Africa/Lusaka","Africa/Nairobi|Africa/Addis_Ababa","Africa/Nairobi|Africa/Asmara","Africa/Nairobi|Africa/Asmera","Africa/Nairobi|Africa/Dar_es_Salaam","Africa/Nairobi|Africa/Djibouti","Africa/Nairobi|Africa/Juba","Africa/Nairobi|Africa/Kampala","Africa/Nairobi|Africa/Mogadishu","Africa/Nairobi|Indian/Antananarivo","Africa/Nairobi|Indian/Comoro","Africa/Nairobi|Indian/Mayotte","Africa/Tripoli|Libya","America/Adak|America/Atka","America/Adak|US/Aleutian","America/Anchorage|America/Juneau","America/Anchorage|America/Nome","America/Anchorage|America/Sitka","America/Anchorage|America/Yakutat","America/Anchorage|US/Alaska","America/Campo_Grande|America/Cuiaba","America/Chicago|America/Indiana/Knox","America/Chicago|America/Indiana/Tell_City","America/Chicago|America/Knox_IN","America/Chicago|America/Matamoros","America/Chicago|America/Menominee","America/Chicago|America/North_Dakota/Beulah","America/Chicago|America/North_Dakota/Center","America/Chicago|America/North_Dakota/New_Salem","America/Chicago|America/Rainy_River","America/Chicago|America/Rankin_Inlet","America/Chicago|America/Resolute","America/Chicago|America/Winnipeg","America/Chicago|CST6CDT","America/Chicago|Canada/Central","America/Chicago|US/Central","America/Chicago|US/Indiana-Starke","America/Chihuahua|America/Mazatlan","America/Chihuahua|Mexico/BajaSur","America/Denver|America/Boise","America/Denver|America/Cambridge_Bay","America/Denver|America/Edmonton","America/Denver|America/Inuvik","America/Denver|America/Ojinaga","America/Denver|America/Shiprock","America/Denver|America/Yellowknife","America/Denver|Canada/Mountain","America/Denver|MST7MDT","America/Denver|Navajo","America/Denver|US/Mountain","America/Fortaleza|America/Argentina/Buenos_Aires","America/Fortaleza|America/Argentina/Catamarca","America/Fortaleza|America/Argentina/ComodRivadavia","America/Fortaleza|America/Argentina/Cordoba","America/Fortaleza|America/Argentina/Jujuy","America/Fortaleza|America/Argentina/La_Rioja","America/Fortaleza|America/Argentina/Mendoza","America/Fortaleza|America/Argentina/Rio_Gallegos","America/Fortaleza|America/Argentina/Salta","America/Fortaleza|America/Argentina/San_Juan","America/Fortaleza|America/Argentina/San_Luis","America/Fortaleza|America/Argentina/Tucuman","America/Fortaleza|America/Argentina/Ushuaia","America/Fortaleza|America/Belem","America/Fortaleza|America/Buenos_Aires","America/Fortaleza|America/Catamarca","America/Fortaleza|America/Cayenne","America/Fortaleza|America/Cordoba","America/Fortaleza|America/Jujuy","America/Fortaleza|America/Maceio","America/Fortaleza|America/Mendoza","America/Fortaleza|America/Paramaribo","America/Fortaleza|America/Recife","America/Fortaleza|America/Rosario","America/Fortaleza|America/Santarem","America/Fortaleza|Antarctica/Rothera","America/Fortaleza|Atlantic/Stanley","America/Fortaleza|Etc/GMT+3","America/Halifax|America/Glace_Bay","America/Halifax|America/Goose_Bay","America/Halifax|America/Moncton","America/Halifax|America/Thule","America/Halifax|Atlantic/Bermuda","America/Halifax|Canada/Atlantic","America/Havana|Cuba","America/La_Paz|America/Boa_Vista","America/La_Paz|America/Guyana","America/La_Paz|America/Manaus","America/La_Paz|America/Porto_Velho","America/La_Paz|Brazil/West","America/La_Paz|Etc/GMT+4","America/Lima|America/Bogota","America/Lima|America/Guayaquil","America/Lima|Etc/GMT+5","America/Los_Angeles|America/Dawson","America/Los_Angeles|America/Ensenada","America/Los_Angeles|America/Santa_Isabel","America/Los_Angeles|America/Tijuana","America/Los_Angeles|America/Vancouver","America/Los_Angeles|America/Whitehorse","America/Los_Angeles|Canada/Pacific","America/Los_Angeles|Canada/Yukon","America/Los_Angeles|Mexico/BajaNorte","America/Los_Angeles|PST8PDT","America/Los_Angeles|US/Pacific","America/Los_Angeles|US/Pacific-New","America/Managua|America/Belize","America/Managua|America/Costa_Rica","America/Managua|America/El_Salvador","America/Managua|America/Guatemala","America/Managua|America/Regina","America/Managua|America/Swift_Current","America/Managua|America/Tegucigalpa","America/Managua|Canada/Saskatchewan","America/Mexico_City|America/Bahia_Banderas","America/Mexico_City|America/Merida","America/Mexico_City|America/Monterrey","America/Mexico_City|Mexico/General","America/New_York|America/Detroit","America/New_York|America/Fort_Wayne","America/New_York|America/Indiana/Indianapolis","America/New_York|America/Indiana/Marengo","America/New_York|America/Indiana/Petersburg","America/New_York|America/Indiana/Vevay","America/New_York|America/Indiana/Vincennes","America/New_York|America/Indiana/Winamac","America/New_York|America/Indianapolis","America/New_York|America/Iqaluit","America/New_York|America/Kentucky/Louisville","America/New_York|America/Kentucky/Monticello","America/New_York|America/Louisville","America/New_York|America/Montreal","America/New_York|America/Nassau","America/New_York|America/Nipigon","America/New_York|America/Pangnirtung","America/New_York|America/Thunder_Bay","America/New_York|America/Toronto","America/New_York|Canada/Eastern","America/New_York|EST5EDT","America/New_York|US/East-Indiana","America/New_York|US/Eastern","America/New_York|US/Michigan","America/Noronha|Atlantic/South_Georgia","America/Noronha|Brazil/DeNoronha","America/Noronha|Etc/GMT+2","America/Panama|America/Atikokan","America/Panama|America/Cayman","America/Panama|America/Coral_Harbour","America/Panama|America/Jamaica","America/Panama|EST","America/Panama|Jamaica","America/Phoenix|America/Creston","America/Phoenix|America/Dawson_Creek","America/Phoenix|America/Hermosillo","America/Phoenix|MST","America/Phoenix|US/Arizona","America/Rio_Branco|America/Eirunepe","America/Rio_Branco|America/Porto_Acre","America/Rio_Branco|Brazil/Acre","America/Santiago|Chile/Continental","America/Santo_Domingo|America/Anguilla","America/Santo_Domingo|America/Antigua","America/Santo_Domingo|America/Aruba","America/Santo_Domingo|America/Barbados","America/Santo_Domingo|America/Blanc-Sablon","America/Santo_Domingo|America/Curacao","America/Santo_Domingo|America/Dominica","America/Santo_Domingo|America/Grenada","America/Santo_Domingo|America/Guadeloupe","America/Santo_Domingo|America/Kralendijk","America/Santo_Domingo|America/Lower_Princes","America/Santo_Domingo|America/Marigot","America/Santo_Domingo|America/Martinique","America/Santo_Domingo|America/Montserrat","America/Santo_Domingo|America/Port_of_Spain","America/Santo_Domingo|America/Puerto_Rico","America/Santo_Domingo|America/St_Barthelemy","America/Santo_Domingo|America/St_Kitts","America/Santo_Domingo|America/St_Lucia","America/Santo_Domingo|America/St_Thomas","America/Santo_Domingo|America/St_Vincent","America/Santo_Domingo|America/Tortola","America/Santo_Domingo|America/Virgin","America/Sao_Paulo|Brazil/East","America/St_Johns|Canada/Newfoundland","Antarctica/Palmer|America/Punta_Arenas","Asia/Baghdad|Antarctica/Syowa","Asia/Baghdad|Asia/Aden","Asia/Baghdad|Asia/Bahrain","Asia/Baghdad|Asia/Kuwait","Asia/Baghdad|Asia/Qatar","Asia/Baghdad|Asia/Riyadh","Asia/Baghdad|Etc/GMT-3","Asia/Baghdad|Europe/Minsk","Asia/Bangkok|Asia/Ho_Chi_Minh","Asia/Bangkok|Asia/Novokuznetsk","Asia/Bangkok|Asia/Phnom_Penh","Asia/Bangkok|Asia/Saigon","Asia/Bangkok|Asia/Vientiane","Asia/Bangkok|Etc/GMT-7","Asia/Bangkok|Indian/Christmas","Asia/Dhaka|Antarctica/Vostok","Asia/Dhaka|Asia/Almaty","Asia/Dhaka|Asia/Bishkek","Asia/Dhaka|Asia/Dacca","Asia/Dhaka|Asia/Kashgar","Asia/Dhaka|Asia/Qostanay","Asia/Dhaka|Asia/Thimbu","Asia/Dhaka|Asia/Thimphu","Asia/Dhaka|Asia/Urumqi","Asia/Dhaka|Etc/GMT-6","Asia/Dhaka|Indian/Chagos","Asia/Dili|Etc/GMT-9","Asia/Dili|Pacific/Palau","Asia/Dubai|Asia/Muscat","Asia/Dubai|Asia/Tbilisi","Asia/Dubai|Asia/Yerevan","Asia/Dubai|Etc/GMT-4","Asia/Dubai|Europe/Samara","Asia/Dubai|Indian/Mahe","Asia/Dubai|Indian/Mauritius","Asia/Dubai|Indian/Reunion","Asia/Gaza|Asia/Hebron","Asia/Hong_Kong|Hongkong","Asia/Jakarta|Asia/Pontianak","Asia/Jerusalem|Asia/Tel_Aviv","Asia/Jerusalem|Israel","Asia/Kamchatka|Asia/Anadyr","Asia/Kamchatka|Etc/GMT-12","Asia/Kamchatka|Kwajalein","Asia/Kamchatka|Pacific/Funafuti","Asia/Kamchatka|Pacific/Kwajalein","Asia/Kamchatka|Pacific/Majuro","Asia/Kamchatka|Pacific/Nauru","Asia/Kamchatka|Pacific/Tarawa","Asia/Kamchatka|Pacific/Wake","Asia/Kamchatka|Pacific/Wallis","Asia/Kathmandu|Asia/Katmandu","Asia/Kolkata|Asia/Calcutta","Asia/Kuala_Lumpur|Asia/Brunei","Asia/Kuala_Lumpur|Asia/Kuching","Asia/Kuala_Lumpur|Asia/Singapore","Asia/Kuala_Lumpur|Etc/GMT-8","Asia/Kuala_Lumpur|Singapore","Asia/Makassar|Asia/Ujung_Pandang","Asia/Rangoon|Asia/Yangon","Asia/Rangoon|Indian/Cocos","Asia/Seoul|ROK","Asia/Shanghai|Asia/Chongqing","Asia/Shanghai|Asia/Chungking","Asia/Shanghai|Asia/Harbin","Asia/Shanghai|Asia/Macao","Asia/Shanghai|Asia/Macau","Asia/Shanghai|Asia/Taipei","Asia/Shanghai|PRC","Asia/Shanghai|ROC","Asia/Tashkent|Antarctica/Mawson","Asia/Tashkent|Asia/Aqtau","Asia/Tashkent|Asia/Aqtobe","Asia/Tashkent|Asia/Ashgabat","Asia/Tashkent|Asia/Ashkhabad","Asia/Tashkent|Asia/Atyrau","Asia/Tashkent|Asia/Dushanbe","Asia/Tashkent|Asia/Oral","Asia/Tashkent|Asia/Samarkand","Asia/Tashkent|Etc/GMT-5","Asia/Tashkent|Indian/Kerguelen","Asia/Tashkent|Indian/Maldives","Asia/Tehran|Iran","Asia/Tokyo|Japan","Asia/Ulaanbaatar|Asia/Choibalsan","Asia/Ulaanbaatar|Asia/Ulan_Bator","Asia/Vladivostok|Asia/Ust-Nera","Asia/Yakutsk|Asia/Khandyga","Atlantic/Azores|America/Scoresbysund","Atlantic/Cape_Verde|Etc/GMT+1","Australia/Adelaide|Australia/Broken_Hill","Australia/Adelaide|Australia/South","Australia/Adelaide|Australia/Yancowinna","Australia/Brisbane|Australia/Lindeman","Australia/Brisbane|Australia/Queensland","Australia/Darwin|Australia/North","Australia/Lord_Howe|Australia/LHI","Australia/Perth|Australia/West","Australia/Sydney|Australia/ACT","Australia/Sydney|Australia/Canberra","Australia/Sydney|Australia/Currie","Australia/Sydney|Australia/Hobart","Australia/Sydney|Australia/Melbourne","Australia/Sydney|Australia/NSW","Australia/Sydney|Australia/Tasmania","Australia/Sydney|Australia/Victoria","Etc/UTC|Etc/UCT","Etc/UTC|Etc/Universal","Etc/UTC|Etc/Zulu","Etc/UTC|UCT","Etc/UTC|UTC","Etc/UTC|Universal","Etc/UTC|Zulu","Europe/Athens|Asia/Nicosia","Europe/Athens|EET","Europe/Athens|Europe/Bucharest","Europe/Athens|Europe/Helsinki","Europe/Athens|Europe/Kiev","Europe/Athens|Europe/Mariehamn","Europe/Athens|Europe/Nicosia","Europe/Athens|Europe/Riga","Europe/Athens|Europe/Sofia","Europe/Athens|Europe/Tallinn","Europe/Athens|Europe/Uzhgorod","Europe/Athens|Europe/Vilnius","Europe/Athens|Europe/Zaporozhye","Europe/Chisinau|Europe/Tiraspol","Europe/Dublin|Eire","Europe/Istanbul|Asia/Istanbul","Europe/Istanbul|Turkey","Europe/Lisbon|Atlantic/Canary","Europe/Lisbon|Atlantic/Faeroe","Europe/Lisbon|Atlantic/Faroe","Europe/Lisbon|Atlantic/Madeira","Europe/Lisbon|Portugal","Europe/Lisbon|WET","Europe/London|Europe/Belfast","Europe/London|Europe/Guernsey","Europe/London|Europe/Isle_of_Man","Europe/London|Europe/Jersey","Europe/London|GB","Europe/London|GB-Eire","Europe/Moscow|W-SU","Europe/Paris|Africa/Ceuta","Europe/Paris|Arctic/Longyearbyen","Europe/Paris|Atlantic/Jan_Mayen","Europe/Paris|CET","Europe/Paris|Europe/Amsterdam","Europe/Paris|Europe/Andorra","Europe/Paris|Europe/Belgrade","Europe/Paris|Europe/Berlin","Europe/Paris|Europe/Bratislava","Europe/Paris|Europe/Brussels","Europe/Paris|Europe/Budapest","Europe/Paris|Europe/Busingen","Europe/Paris|Europe/Copenhagen","Europe/Paris|Europe/Gibraltar","Europe/Paris|Europe/Ljubljana","Europe/Paris|Europe/Luxembourg","Europe/Paris|Europe/Madrid","Europe/Paris|Europe/Malta","Europe/Paris|Europe/Monaco","Europe/Paris|Europe/Oslo","Europe/Paris|Europe/Podgorica","Europe/Paris|Europe/Prague","Europe/Paris|Europe/Rome","Europe/Paris|Europe/San_Marino","Europe/Paris|Europe/Sarajevo","Europe/Paris|Europe/Skopje","Europe/Paris|Europe/Stockholm","Europe/Paris|Europe/Tirane","Europe/Paris|Europe/Vaduz","Europe/Paris|Europe/Vatican","Europe/Paris|Europe/Vienna","Europe/Paris|Europe/Warsaw","Europe/Paris|Europe/Zagreb","Europe/Paris|Europe/Zurich","Europe/Paris|Poland","Europe/Ulyanovsk|Europe/Astrakhan","Pacific/Auckland|Antarctica/McMurdo","Pacific/Auckland|Antarctica/South_Pole","Pacific/Auckland|NZ","Pacific/Chatham|NZ-CHAT","Pacific/Easter|Chile/EasterIsland","Pacific/Fakaofo|Etc/GMT-13","Pacific/Fakaofo|Pacific/Enderbury","Pacific/Galapagos|Etc/GMT+6","Pacific/Gambier|Etc/GMT+9","Pacific/Guadalcanal|Antarctica/Macquarie","Pacific/Guadalcanal|Etc/GMT-11","Pacific/Guadalcanal|Pacific/Efate","Pacific/Guadalcanal|Pacific/Kosrae","Pacific/Guadalcanal|Pacific/Noumea","Pacific/Guadalcanal|Pacific/Pohnpei","Pacific/Guadalcanal|Pacific/Ponape","Pacific/Guam|Pacific/Saipan","Pacific/Honolulu|HST","Pacific/Honolulu|Pacific/Johnston","Pacific/Honolulu|US/Hawaii","Pacific/Kiritimati|Etc/GMT-14","Pacific/Niue|Etc/GMT+11","Pacific/Pago_Pago|Pacific/Midway","Pacific/Pago_Pago|Pacific/Samoa","Pacific/Pago_Pago|US/Samoa","Pacific/Pitcairn|Etc/GMT+8","Pacific/Port_Moresby|Antarctica/DumontDUrville","Pacific/Port_Moresby|Etc/GMT-10","Pacific/Port_Moresby|Pacific/Chuuk","Pacific/Port_Moresby|Pacific/Truk","Pacific/Port_Moresby|Pacific/Yap","Pacific/Tahiti|Etc/GMT+10","Pacific/Tahiti|Pacific/Rarotonga"]}),i},e.exports?e.exports=n(Ks):n(t.moment)}),Zs=function(e,t){var n=e.toString();function r(r){return function(e,t,n){return r+t+(n[0].toUpperCase()===n[0]?"A":"a")}}if((t=t||{}).preferredOrder=t.preferredOrder||Yu,(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=(n=n.replace(Lu,"x")).replace(Ru,"X")).replace(Pu,"[$1]")).replace(Qs,"dddd")).replace(eu,"ddd")).replace(tu,"dd")).replace(au,"Do")).replace(nu,"MMMM")).replace(ru,"MMM")).replace(iu,function(e,t,n,r,a,i){var o,s=1===Math.min(n.length,a.length,i.length),u=4===Math.max(n.length,a.length,i.length),c="string"==typeof e.preferredOrder?e.preferredOrder:e.preferredOrder[r];return n=parseInt(n,10),a=parseInt(a,10),i=parseInt(i,10),o=[n,a,i],c=c.toUpperCase(),31<n?(o[0]=u?"YYYY":"YY",o[1]=s?"M":"MM",o[2]=s?"D":"DD"):12<a?(o[0]=s?"M":"MM",o[1]=s?"D":"DD",o[2]=u?"YYYY":"YY"):31<i?(o[2]=u?"YYYY":"YY","M"===c[0]&&n<13?(o[0]=s?"M":"MM",o[1]=s?"D":"DD"):(o[0]=s?"D":"DD",o[1]=s?"M":"MM")):(o[c.indexOf("D")]=s?"D":"DD",o[c.indexOf("M")]=s?"M":"MM",o[c.indexOf("Y")]=u?"YYYY":"YY"),o.join(r)}.bind(null,t))).replace(ou,"Z")).replace(pu,"HH:mm:ss.SSS")).replace(mu,"HH:mm:ss.SS")).replace(gu,"HH:mm:ss.S")).replace(uu,r("hh:mm:ss"))).replace(fu,r("h:mm:ss"))).replace(cu,r("hh:mm"))).replace(hu,r("h:mm"))).replace(lu,r("hh"))).replace(du,r("h"))).replace(vu,"HH:mm:ss")).replace(bu,"H:mm:ss.SSS")).replace(wu,"H:mm:ss.SS")).replace(Au,"H:mm:ss.S")).replace(_u,"H:mm:ss")).replace(yu,"HH:mm")).replace(xu,"H:mm")).replace(ku,"YYYY")).replace(Tu,"D/M")).replace(Cu,"D/MM")).replace(Du,"DD/M")).replace(Ou,"DD/MM")).replace(ju,"M/YY")).replace(Nu,"MM/YY")).match(zu)){n=(n=n.replace(/0\d.\d{2}|\d{2}.\d{2}/,"H.mm")).replace(/\d{1}.\d{2}/,"h.mm")}(n=(n=(n=n.replace(Eu,"DD")).replace(Su,"D")).replace(Mu,"YY")).length<1&&(n=void 0);return n},Qs=new RegExp(["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"].join("|"),"i"),eu=new RegExp(["Sun","Mon","Tue","Wed","Thu","Fri","Sat"].join("|"),"i"),tu=new RegExp("\\b("+["Su","Mo","Tu","We","Th","Fr","Sa"].join("|")+")\\b","i"),nu=new RegExp(["January","February","March","April","May","June","July","August","September","October","November","December"].join("|"),"i"),ru=new RegExp(["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"].join("|"),"i"),au=/(\d+)(st|nd|rd|th)\b/i,iu=/(\d{1,4})([/.-])(\d{1,2})[/.-](\d{1,4})/,ou=/((\+|-)\d\d:?\d\d)$/,su="("+["AM?","PM?"].join("|")+")",uu=new RegExp("0\\d\\:\\d{1,2}\\:\\d{1,2}(\\s*)"+su,"i"),cu=new RegExp("0\\d\\:\\d{1,2}(\\s*)"+su,"i"),lu=new RegExp("0\\d(\\s*)"+su,"i"),fu=new RegExp("\\d{1,2}\\:\\d{1,2}\\:\\d{1,2}(\\s*)"+su,"i"),hu=new RegExp("\\d{1,2}\\:\\d{1,2}(\\s*)"+su,"i"),du=new RegExp("\\d{1,2}(\\s*)"+su,"i"),pu=/\d{2}:\d{2}:\d{2}\.\d{3}/,mu=/\d{2}:\d{2}:\d{2}\.\d{2}/,gu=/\d{2}:\d{2}:\d{2}\.\d{1}/,vu=/0\d:\d{2}:\d{2}/,yu=/0\d:\d{2}/,_u=/\d{1,2}:\d{2}:\d{2}/,bu=/\d{1,2}:\d{2}:\d{2}\.\d{3}/,wu=/\d{1,2}:\d{2}:\d{2}\.\d{2}/,Au=/\d{1,2}:\d{2}:\d{2}\.\d{1}/,xu=/\d{1,2}:\d{2}/,ku=/\d{4}/,Eu=/0\d/,Su=/\d{1,2}/,Mu=/\d{2}/,Tu=/^([1-9])\/([1-9]|0[1-9])$/,Cu=/^([1-9])\/(1[012])$/,Du=/^(0[1-9]|[12][0-9]|3[01])\/([1-9])$/,Ou=/^(0[1-9]|[12][0-9]|3[01])\/(1[012]|0[1-9])$/,ju=/^([1-9])\/([1-9][0-9])$/,Nu=/^(0[1-9]|1[012])\/([1-9][0-9])$/,zu=/([/][M]|[M][/]|[MM]|[MMMM])/,Pu=/\b(at)\b/i,Lu=/\d{13}/,Ru=/\d{10}/,Yu={"/":"MDY",".":"DMY","-":"YMD"};var Wu=Zs;function qu(e,t,n){if(Bs.test(e))return Xs(new Date(e));if(Is.test(e)){var r=Is.exec(e);return Xs().subtract(r[1],r[2])}return Ws.test(e)?Xs():t?Xs.tz(e,n||Wu(e),t):Xs(e,n||Wu(e))}function Iu(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},n=t.timezone,r=t.format;if(zs.test(e)||Ps.test(e))return new Date(ba(e,10)).toISOString();var a=qu(e,n,r);return a.isValid()||(a=qu(e=(e.match(Fs)||[]).join(" ").replace(Ys,"m").replace(Rs,"$1 $2 $3").replace(Ls,"$1").trim(),n,r)),a.isValid()?a.toISOString():null}function Hu(e,t){var n,r,a,i,o,s,u=t.$,c=(t.cleanConditionally,t.title),l=void 0===c?"":c,f=t.url,h=void 0===f?"":f,d=t.defaultCleaner,p=void 0===d||d;return n=Mi((n=Mi((n=u)("html"),n,"div"))("body"),n,"div"),p&&Ti(e,u),Go(e,u,h),function(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:[];if(0===r.length&&(r=li),n){var a=Mr.parse(n),i=a.protocol,o=a.hostname;r=[].concat(Li(r),['iframe[src^="'.concat(i,"//").concat(o,'"]')])}t(r.join(","),e).addClass(ci)}(e,u,h),function(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:[];0===n.length&&(n=fi),t(n.join(","),e).not(".".concat(ci)).remove()}(e,u),(a=(r=u)("h1",e)).length<3?a.each(function(e,t){return r(t).remove()}):a.each(function(e,t){Mi(r(t),r,"h2")}),function(r,a){var i=2<arguments.length&&void 0!==arguments[2]?arguments[2]:"";a(pi,r).each(function(e,t){var n=a(t);return 0===a(n,r).prevAll("p").length?n.remove():ua(a(t).text())===i?n.remove():$i(a(t))<0?n.remove():n})}(e,u,l),p&&co(e,u),i=u,e.find("p").each(function(e,t){var n=i(t);0===n.find("iframe, img").length&&""===n.text().trim()&&n.remove()}),s=u,Ri((o=e).parent().length?o.parent():o,s),e}function Fu(e,t){var n=t.url,r=t.$;if(Gs.test(e)&&(e=function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:"",n=e.split(Gs);if(1===n.length)return e;var r=function(e,t){if(6<=e.length){var n=e.reduce(function(e,t){return e[t]=e[t]?e[t]+1:1,e},{}),r=si(n).reduce(function(e,t){return e[1]<n[t]?[t,n[t]]:e},[0,0]),a=ja(r,2),i=a[0],o=a[1];2<=o&&i.length<=4&&(e=t.split(i));var s=[e[0],e.slice(-1)],u=s.reduce(function(e,t){return e.length>t.length?e:t},"");return 10<u.length?u:t}return null}(n,e);return r||(r=function(e,t){var n=Mr.parse(t).host.replace(Us,""),r=e[0].toLowerCase().replace(" ","");if(.4<$u.levenshtein(r,n)&&5<r.length)return e.slice(2).join("");var a=e.slice(-1)[0].toLowerCase().replace(" ","");return.4<$u.levenshtein(a,n)&&5<=a.length?e.slice(0,-2).join(""):null}(n,t))||e}(e,n)),150<e.length){var a=r("h1");1===a.length&&(e=a.text())}return ua(es(e,r).trim())}"undefined"!=typeof window&&window.moment&&(window.moment.parseFormat=Zs);var Bu=e(function(W,q){(function(){var to,no="Expected a function",ro="__lodash_hash_undefined__",ao="__lodash_placeholder__",io=9007199254740991,oo=NaN,so=4294967295,uo=[["ary",128],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",32],["partialRight",64],["rearg",256]],co="[object Arguments]",lo="[object Array]",fo="[object Boolean]",ho="[object Date]",po="[object Error]",mo="[object Function]",go="[object GeneratorFunction]",vo="[object Map]",yo="[object Number]",_o="[object Object]",bo="[object Promise]",wo="[object RegExp]",Ao="[object Set]",xo="[object String]",ko="[object Symbol]",Eo="[object WeakMap]",So="[object ArrayBuffer]",Mo="[object DataView]",To="[object Float32Array]",Co="[object Float64Array]",Do="[object Int8Array]",Oo="[object Int16Array]",jo="[object Int32Array]",No="[object Uint8Array]",zo="[object Uint8ClampedArray]",Po="[object Uint16Array]",Lo="[object Uint32Array]",Ro=/\b__p \+= '';/g,Yo=/\b(__p \+=) '' \+/g,Wo=/(__e\(.*?\)|\b__t\)) \+\n'';/g,qo=/&(?:amp|lt|gt|quot|#39);/g,Io=/[&<>"']/g,Ho=RegExp(qo.source),Fo=RegExp(Io.source),Bo=/<%-([\s\S]+?)%>/g,Go=/<%([\s\S]+?)%>/g,Uo=/<%=([\s\S]+?)%>/g,$o=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Vo=/^\w*$/,Jo=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Ko=/[\\^$.*+?()[\]{}|]/g,Xo=RegExp(Ko.source),Zo=/^\s+|\s+$/g,Qo=/^\s+/,es=/\s+$/,ts=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,ns=/\{\n\/\* \[wrapped with (.+)\] \*/,rs=/,? & /,as=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,is=/\\(\\)?/g,os=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,ss=/\w*$/,us=/^[-+]0x[0-9a-f]+$/i,cs=/^0b[01]+$/i,ls=/^\[object .+?Constructor\]$/,fs=/^0o[0-7]+$/i,hs=/^(?:0|[1-9]\d*)$/,ds=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,ps=/($^)/,ms=/['\n\r\u2028\u2029\\]/g,e="\\ud800-\\udfff",t="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",n="\\u2700-\\u27bf",r="a-z\\xdf-\\xf6\\xf8-\\xff",a="A-Z\\xc0-\\xd6\\xd8-\\xde",i="\\ufe0e\\ufe0f",o="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\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",s="["+e+"]",u="["+o+"]",c="["+t+"]",l="\\d+",f="["+n+"]",h="["+r+"]",d="[^"+e+o+l+n+r+a+"]",p="\\ud83c[\\udffb-\\udfff]",m="[^"+e+"]",g="(?:\\ud83c[\\udde6-\\uddff]){2}",v="[\\ud800-\\udbff][\\udc00-\\udfff]",y="["+a+"]",_="(?:"+h+"|"+d+")",b="(?:"+y+"|"+d+")",w="(?:['’](?:d|ll|m|re|s|t|ve))?",A="(?:['’](?:D|LL|M|RE|S|T|VE))?",x="(?:"+c+"|"+p+")"+"?",k="["+i+"]?",E=k+x+("(?:\\u200d(?:"+[m,g,v].join("|")+")"+k+x+")*"),S="(?:"+[f,g,v].join("|")+")"+E,M="(?:"+[m+c+"?",c,g,v,s].join("|")+")",gs=RegExp("['’]","g"),vs=RegExp(c,"g"),T=RegExp(p+"(?="+p+")|"+M+E,"g"),ys=RegExp([y+"?"+h+"+"+w+"(?="+[u,y,"$"].join("|")+")",b+"+"+A+"(?="+[u,y+_,"$"].join("|")+")",y+"?"+_+"+"+w,y+"+"+A,"\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",l,S].join("|"),"g"),C=RegExp("[\\u200d"+e+t+i+"]"),_s=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,bs=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],ws=-1,As={};As[To]=As[Co]=As[Do]=As[Oo]=As[jo]=As[No]=As[zo]=As[Po]=As[Lo]=!0,As[co]=As[lo]=As[So]=As[fo]=As[Mo]=As[ho]=As[po]=As[mo]=As[vo]=As[yo]=As[_o]=As[wo]=As[Ao]=As[xo]=As[Eo]=!1;var xs={};xs[co]=xs[lo]=xs[So]=xs[Mo]=xs[fo]=xs[ho]=xs[To]=xs[Co]=xs[Do]=xs[Oo]=xs[jo]=xs[vo]=xs[yo]=xs[_o]=xs[wo]=xs[Ao]=xs[xo]=xs[ko]=xs[No]=xs[zo]=xs[Po]=xs[Lo]=!0,xs[po]=xs[mo]=xs[Eo]=!1;var D={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},ks=parseFloat,Es=parseInt,O="object"==typeof er&&er&&er.Object===Object&&er,j="object"==typeof self&&self&&self.Object===Object&&self,Ss=O||j||Function("return this")(),N=q&&!q.nodeType&&q,z=N&&W&&!W.nodeType&&W,Ms=z&&z.exports===N,P=Ms&&O.process,L=function(){try{var e=z&&z.require&&z.require("util").types;return e||P&&P.binding&&P.binding("util")}catch(e){}}(),Ts=L&&L.isArrayBuffer,Cs=L&&L.isDate,Ds=L&&L.isMap,Os=L&&L.isRegExp,js=L&&L.isSet,Ns=L&&L.isTypedArray;function zs(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}function Ps(e,t,n,r){for(var a=-1,i=null==e?0:e.length;++a<i;){var o=e[a];t(r,o,n(o),e)}return r}function Ls(e,t){for(var n=-1,r=null==e?0:e.length;++n<r&&!1!==t(e[n],n,e););return e}function Rs(e,t){for(var n=null==e?0:e.length;n--&&!1!==t(e[n],n,e););return e}function Ys(e,t){for(var n=-1,r=null==e?0:e.length;++n<r;)if(!t(e[n],n,e))return!1;return!0}function Ws(e,t){for(var n=-1,r=null==e?0:e.length,a=0,i=[];++n<r;){var o=e[n];t(o,n,e)&&(i[a++]=o)}return i}function qs(e,t){return!!(null==e?0:e.length)&&-1<Js(e,t,0)}function Is(e,t,n){for(var r=-1,a=null==e?0:e.length;++r<a;)if(n(t,e[r]))return!0;return!1}function Hs(e,t){for(var n=-1,r=null==e?0:e.length,a=Array(r);++n<r;)a[n]=t(e[n],n,e);return a}function Fs(e,t){for(var n=-1,r=t.length,a=e.length;++n<r;)e[a+n]=t[n];return e}function Bs(e,t,n,r){var a=-1,i=null==e?0:e.length;for(r&&i&&(n=e[++a]);++a<i;)n=t(n,e[a],a,e);return n}function Gs(e,t,n,r){var a=null==e?0:e.length;for(r&&a&&(n=e[--a]);a--;)n=t(n,e[a],a,e);return n}function Us(e,t){for(var n=-1,r=null==e?0:e.length;++n<r;)if(t(e[n],n,e))return!0;return!1}var R=Qs("length");function $s(e,r,t){var a;return t(e,function(e,t,n){if(r(e,t,n))return a=t,!1}),a}function Vs(e,t,n,r){for(var a=e.length,i=n+(r?1:-1);r?i--:++i<a;)if(t(e[i],i,e))return i;return-1}function Js(e,t,n){return t==t?function(e,t,n){var r=n-1,a=e.length;for(;++r<a;)if(e[r]===t)return r;return-1}(e,t,n):Vs(e,Xs,n)}function Ks(e,t,n,r){for(var a=n-1,i=e.length;++a<i;)if(r(e[a],t))return a;return-1}function Xs(e){return e!=e}function Zs(e,t){var n=null==e?0:e.length;return n?tu(e,t)/n:oo}function Qs(t){return function(e){return null==e?to:e[t]}}function Y(t){return function(e){return null==t?to:t[e]}}function eu(e,r,a,i,t){return t(e,function(e,t,n){a=i?(i=!1,e):r(a,e,t,n)}),a}function tu(e,t){for(var n,r=-1,a=e.length;++r<a;){var i=t(e[r]);i!==to&&(n=n===to?i:n+i)}return n}function nu(e,t){for(var n=-1,r=Array(e);++n<e;)r[n]=t(n);return r}function ru(t){return function(e){return t(e)}}function au(t,e){return Hs(e,function(e){return t[e]})}function iu(e,t){return e.has(t)}function ou(e,t){for(var n=-1,r=e.length;++n<r&&-1<Js(t,e[n],0););return n}function su(e,t){for(var n=e.length;n--&&-1<Js(t,e[n],0););return n}var uu=Y({"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss","Ā":"A","Ă":"A","Ą":"A","ā":"a","ă":"a","ą":"a","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","ć":"c","ĉ":"c","ċ":"c","č":"c","Ď":"D","Đ":"D","ď":"d","đ":"d","Ē":"E","Ĕ":"E","Ė":"E","Ę":"E","Ě":"E","ē":"e","ĕ":"e","ė":"e","ę":"e","ě":"e","Ĝ":"G","Ğ":"G","Ġ":"G","Ģ":"G","ĝ":"g","ğ":"g","ġ":"g","ģ":"g","Ĥ":"H","Ħ":"H","ĥ":"h","ħ":"h","Ĩ":"I","Ī":"I","Ĭ":"I","Į":"I","İ":"I","ĩ":"i","ī":"i","ĭ":"i","į":"i","ı":"i","Ĵ":"J","ĵ":"j","Ķ":"K","ķ":"k","ĸ":"k","Ĺ":"L","Ļ":"L","Ľ":"L","Ŀ":"L","Ł":"L","ĺ":"l","ļ":"l","ľ":"l","ŀ":"l","ł":"l","Ń":"N","Ņ":"N","Ň":"N","Ŋ":"N","ń":"n","ņ":"n","ň":"n","ŋ":"n","Ō":"O","Ŏ":"O","Ő":"O","ō":"o","ŏ":"o","ő":"o","Ŕ":"R","Ŗ":"R","Ř":"R","ŕ":"r","ŗ":"r","ř":"r","Ś":"S","Ŝ":"S","Ş":"S","Š":"S","ś":"s","ŝ":"s","ş":"s","š":"s","Ţ":"T","Ť":"T","Ŧ":"T","ţ":"t","ť":"t","ŧ":"t","Ũ":"U","Ū":"U","Ŭ":"U","Ů":"U","Ű":"U","Ų":"U","ũ":"u","ū":"u","ŭ":"u","ů":"u","ű":"u","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z","Ż":"Z","Ž":"Z","ź":"z","ż":"z","ž":"z","IJ":"IJ","ij":"ij","Œ":"Oe","œ":"oe","ʼn":"'n","ſ":"s"}),cu=Y({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"});function lu(e){return"\\"+D[e]}function fu(e){return C.test(e)}function hu(e){var n=-1,r=Array(e.size);return e.forEach(function(e,t){r[++n]=[t,e]}),r}function du(t,n){return function(e){return t(n(e))}}function pu(e,t){for(var n=-1,r=e.length,a=0,i=[];++n<r;){var o=e[n];o!==t&&o!==ao||(e[n]=ao,i[a++]=n)}return i}function mu(e){var t=-1,n=Array(e.size);return e.forEach(function(e){n[++t]=e}),n}function gu(e){return fu(e)?function(e){var t=T.lastIndex=0;for(;T.test(e);)++t;return t}(e):R(e)}function vu(e){return fu(e)?e.match(T)||[]:e.split("")}var yu=Y({"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&#39;":"'"});var _u=function e(t){var n,T=(t=null==t?Ss:_u.defaults(Ss.Object(),t,_u.pick(Ss,bs))).Array,r=t.Date,a=t.Error,g=t.Function,i=t.Math,k=t.Object,v=t.RegExp,l=t.String,C=t.TypeError,o=T.prototype,s=g.prototype,f=k.prototype,u=t["__core-js_shared__"],c=s.toString,E=f.hasOwnProperty,h=0,d=(n=/[^.]+$/.exec(u&&u.keys&&u.keys.IE_PROTO||""))?"Symbol(src)_1."+n:"",p=f.toString,m=c.call(k),y=Ss._,_=v("^"+c.call(E).replace(Ko,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),b=Ms?t.Buffer:to,w=t.Symbol,A=t.Uint8Array,x=b?b.allocUnsafe:to,S=du(k.getPrototypeOf,k),M=k.create,D=f.propertyIsEnumerable,O=o.splice,j=w?w.isConcatSpreadable:to,N=w?w.iterator:to,z=w?w.toStringTag:to,P=function(){try{var e=qn(k,"defineProperty");return e({},"",{}),e}catch(e){}}(),L=t.clearTimeout!==Ss.clearTimeout&&t.clearTimeout,R=r&&r.now!==Ss.Date.now&&r.now,Y=t.setTimeout!==Ss.setTimeout&&t.setTimeout,W=i.ceil,q=i.floor,I=k.getOwnPropertySymbols,H=b?b.isBuffer:to,F=t.isFinite,B=o.join,G=du(k.keys,k),U=i.max,$=i.min,V=r.now,J=t.parseInt,K=i.random,X=o.reverse,Z=qn(t,"DataView"),Q=qn(t,"Map"),ee=qn(t,"Promise"),te=qn(t,"Set"),ne=qn(t,"WeakMap"),re=qn(k,"create"),ae=ne&&new ne,ie={},oe=pr(Z),se=pr(Q),ue=pr(ee),ce=pr(te),le=pr(ne),fe=w?w.prototype:to,he=fe?fe.valueOf:to,de=fe?fe.toString:to;function pe(e){if(Oa(e)&&!ba(e)&&!(e instanceof ye)){if(e instanceof ve)return e;if(E.call(e,"__wrapped__"))return mr(e)}return new ve(e)}var me=function(){function n(){}return function(e){if(!Da(e))return{};if(M)return M(e);n.prototype=e;var t=new n;return n.prototype=to,t}}();function ge(){}function ve(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=to}function ye(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=so,this.__views__=[]}function _e(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function be(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function we(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function Ae(e){var t=-1,n=null==e?0:e.length;for(this.__data__=new we;++t<n;)this.add(e[t])}function xe(e){var t=this.__data__=new be(e);this.size=t.size}function ke(e,t){var n=ba(e),r=!n&&_a(e),a=!n&&!r&&ka(e),i=!n&&!r&&!a&&Wa(e),o=n||r||a||i,s=o?nu(e.length,l):[],u=s.length;for(var c in e)!t&&!E.call(e,c)||o&&("length"==c||a&&("offset"==c||"parent"==c)||i&&("buffer"==c||"byteLength"==c||"byteOffset"==c)||$n(c,u))||s.push(c);return s}function Ee(e){var t=e.length;return t?e[At(0,t-1)]:to}function Se(e,t){return cr(rn(e),Pe(t,0,e.length))}function Me(e){return cr(rn(e))}function Te(e,t,n){(n===to||ga(e[t],n))&&(n!==to||t in e)||Ne(e,t,n)}function Ce(e,t,n){var r=e[t];E.call(e,t)&&ga(r,n)&&(n!==to||t in e)||Ne(e,t,n)}function De(e,t){for(var n=e.length;n--;)if(ga(e[n][0],t))return n;return-1}function Oe(e,r,a,i){return qe(e,function(e,t,n){r(i,e,a(e),n)}),i}function je(e,t){return e&&an(t,si(t),e)}function Ne(e,t,n){"__proto__"==t&&P?P(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}function ze(e,t){for(var n=-1,r=t.length,a=T(r),i=null==e;++n<r;)a[n]=i?to:ni(e,t[n]);return a}function Pe(e,t,n){return e==e&&(n!==to&&(e=e<=n?e:n),t!==to&&(e=t<=e?e:t)),e}function Le(n,r,a,e,t,i){var o,s=1&r,u=2&r,c=4&r;if(a&&(o=t?a(n,e,t,i):a(n)),o!==to)return o;if(!Da(n))return n;var l,f,h,d,p,m,g,v,y,_=ba(n);if(_){if(v=(g=n).length,y=new g.constructor(v),v&&"string"==typeof g[0]&&E.call(g,"index")&&(y.index=g.index,y.input=g.input),o=y,!s)return rn(n,o)}else{var b=Fn(n),w=b==mo||b==go;if(ka(n))return Xt(n,s);if(b==_o||b==co||w&&!t){if(o=u||w?{}:Gn(n),!s)return u?(m=h=n,d=(p=o)&&an(m,ui(m),p),an(h,Hn(h),d)):(f=je(o,l=n),an(l,In(l),f))}else{if(!xs[b])return t?n:{};o=function(e,t,n){var r,a,i,o,s,u=e.constructor;switch(t){case So:return Zt(e);case fo:case ho:return new u(+e);case Mo:return o=e,s=n?Zt(o.buffer):o.buffer,new o.constructor(s,o.byteOffset,o.byteLength);case To:case Co:case Do:case Oo:case jo:case No:case zo:case Po:case Lo:return Qt(e,n);case vo:return new u;case yo:case xo:return new u(e);case wo:return(i=new(a=e).constructor(a.source,ss.exec(a))).lastIndex=a.lastIndex,i;case Ao:return new u;case ko:return r=e,he?k(he.call(r)):{}}}(n,b,s)}}i||(i=new xe);var A=i.get(n);if(A)return A;i.set(n,o),La(n)?n.forEach(function(e){o.add(Le(e,r,a,e,n,i))}):ja(n)&&n.forEach(function(e,t){o.set(t,Le(e,r,a,t,n,i))});var x=_?to:(c?u?Nn:jn:u?ui:si)(n);return Ls(x||n,function(e,t){x&&(e=n[t=e]),Ce(o,t,Le(e,r,a,t,n,i))}),o}function Re(e,t,n){var r=n.length;if(null==e)return!r;for(e=k(e);r--;){var a=n[r],i=t[a],o=e[a];if(o===to&&!(a in e)||!i(o))return!1}return!0}function Ye(e,t,n){if("function"!=typeof e)throw new C(no);return ir(function(){e.apply(to,n)},t)}function We(e,t,n,r){var a=-1,i=qs,o=!0,s=e.length,u=[],c=t.length;if(!s)return u;n&&(t=Hs(t,ru(n))),r?(i=Is,o=!1):200<=t.length&&(i=iu,o=!1,t=new Ae(t));e:for(;++a<s;){var l=e[a],f=null==n?l:n(l);if(l=r||0!==l?l:0,o&&f==f){for(var h=c;h--;)if(t[h]===f)continue e;u.push(l)}else i(t,f,r)||u.push(l)}return u}pe.templateSettings={escape:Bo,evaluate:Go,interpolate:Uo,variable:"",imports:{_:pe}},(pe.prototype=ge.prototype).constructor=pe,(ve.prototype=me(ge.prototype)).constructor=ve,(ye.prototype=me(ge.prototype)).constructor=ye,_e.prototype.clear=function(){this.__data__=re?re(null):{},this.size=0},_e.prototype.delete=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},_e.prototype.get=function(e){var t=this.__data__;if(re){var n=t[e];return n===ro?to:n}return E.call(t,e)?t[e]:to},_e.prototype.has=function(e){var t=this.__data__;return re?t[e]!==to:E.call(t,e)},_e.prototype.set=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=re&&t===to?ro:t,this},be.prototype.clear=function(){this.__data__=[],this.size=0},be.prototype.delete=function(e){var t=this.__data__,n=De(t,e);return!(n<0||(n==t.length-1?t.pop():O.call(t,n,1),--this.size,0))},be.prototype.get=function(e){var t=this.__data__,n=De(t,e);return n<0?to:t[n][1]},be.prototype.has=function(e){return-1<De(this.__data__,e)},be.prototype.set=function(e,t){var n=this.__data__,r=De(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this},we.prototype.clear=function(){this.size=0,this.__data__={hash:new _e,map:new(Q||be),string:new _e}},we.prototype.delete=function(e){var t=Yn(this,e).delete(e);return this.size-=t?1:0,t},we.prototype.get=function(e){return Yn(this,e).get(e)},we.prototype.has=function(e){return Yn(this,e).has(e)},we.prototype.set=function(e,t){var n=Yn(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this},Ae.prototype.add=Ae.prototype.push=function(e){return this.__data__.set(e,ro),this},Ae.prototype.has=function(e){return this.__data__.has(e)},xe.prototype.clear=function(){this.__data__=new be,this.size=0},xe.prototype.delete=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n},xe.prototype.get=function(e){return this.__data__.get(e)},xe.prototype.has=function(e){return this.__data__.has(e)},xe.prototype.set=function(e,t){var n=this.__data__;if(n instanceof be){var r=n.__data__;if(!Q||r.length<199)return r.push([e,t]),this.size=++n.size,this;n=this.__data__=new we(r)}return n.set(e,t),this.size=n.size,this};var qe=un(Ve),Ie=un(Je,!0);function He(e,r){var a=!0;return qe(e,function(e,t,n){return a=!!r(e,t,n)}),a}function Fe(e,t,n){for(var r=-1,a=e.length;++r<a;){var i=e[r],o=t(i);if(null!=o&&(s===to?o==o&&!Ya(o):n(o,s)))var s=o,u=i}return u}function Be(e,r){var a=[];return qe(e,function(e,t,n){r(e,t,n)&&a.push(e)}),a}function Ge(e,t,n,r,a){var i=-1,o=e.length;for(n||(n=Un),a||(a=[]);++i<o;){var s=e[i];0<t&&n(s)?1<t?Ge(s,t-1,n,r,a):Fs(a,s):r||(a[a.length]=s)}return a}var Ue=cn(),$e=cn(!0);function Ve(e,t){return e&&Ue(e,t,si)}function Je(e,t){return e&&$e(e,t,si)}function Ke(t,e){return Ws(e,function(e){return Ma(t[e])})}function Xe(e,t){for(var n=0,r=(t=$t(t,e)).length;null!=e&&n<r;)e=e[dr(t[n++])];return n&&n==r?e:to}function Ze(e,t,n){var r=t(e);return ba(e)?r:Fs(r,n(e))}function Qe(e){return null==e?e===to?"[object Undefined]":"[object Null]":z&&z in k(e)?function(e){var t=E.call(e,z),n=e[z];try{e[z]=to;var r=!0}catch(e){}var a=p.call(e);return r&&(t?e[z]=n:delete e[z]),a}(e):(t=e,p.call(t));var t}function et(e,t){return t<e}function tt(e,t){return null!=e&&E.call(e,t)}function nt(e,t){return null!=e&&t in k(e)}function rt(e,t,n){for(var r=n?Is:qs,a=e[0].length,i=e.length,o=i,s=T(i),u=1/0,c=[];o--;){var l=e[o];o&&t&&(l=Hs(l,ru(t))),u=$(l.length,u),s[o]=!n&&(t||120<=a&&120<=l.length)?new Ae(o&&l):to}l=e[0];var f=-1,h=s[0];e:for(;++f<a&&c.length<u;){var d=l[f],p=t?t(d):d;if(d=n||0!==d?d:0,!(h?iu(h,p):r(c,p,n))){for(o=i;--o;){var m=s[o];if(!(m?iu(m,p):r(e[o],p,n)))continue e}h&&h.push(p),c.push(d)}}return c}function at(e,t,n){var r=null==(e=nr(e,t=$t(t,e)))?e:e[dr(Sr(t))];return null==r?to:zs(r,e,n)}function it(e){return Oa(e)&&Qe(e)==co}function ot(e,t,n,r,a){return e===t||(null==e||null==t||!Oa(e)&&!Oa(t)?e!=e&&t!=t:function(e,t,n,r,a,i){var o=ba(e),s=ba(t),u=o?lo:Fn(e),c=s?lo:Fn(t),l=(u=u==co?_o:u)==_o,f=(c=c==co?_o:c)==_o,h=u==c;if(h&&ka(e)){if(!ka(t))return!1;l=!(o=!0)}if(h&&!l)return i||(i=new xe),o||Wa(e)?Dn(e,t,n,r,a,i):function(e,t,n,r,a,i,o){switch(n){case Mo:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case So:return!(e.byteLength!=t.byteLength||!i(new A(e),new A(t)));case fo:case ho:case yo:return ga(+e,+t);case po:return e.name==t.name&&e.message==t.message;case wo:case xo:return e==t+"";case vo:var s=hu;case Ao:var u=1&r;if(s||(s=mu),e.size!=t.size&&!u)return!1;var c=o.get(e);if(c)return c==t;r|=2,o.set(e,t);var l=Dn(s(e),s(t),r,a,i,o);return o.delete(e),l;case ko:if(he)return he.call(e)==he.call(t)}return!1}(e,t,u,n,r,a,i);if(!(1&n)){var d=l&&E.call(e,"__wrapped__"),p=f&&E.call(t,"__wrapped__");if(d||p){var m=d?e.value():e,g=p?t.value():t;return i||(i=new xe),a(m,g,n,r,i)}}return!!h&&(i||(i=new xe),function(e,t,n,r,a,i){var o=1&n,s=jn(e),u=s.length,c=jn(t).length;if(u!=c&&!o)return!1;for(var l=u;l--;){var f=s[l];if(!(o?f in t:E.call(t,f)))return!1}var h=i.get(e);if(h&&i.get(t))return h==t;var d=!0;i.set(e,t),i.set(t,e);for(var p=o;++l<u;){f=s[l];var m=e[f],g=t[f];if(r)var v=o?r(g,m,f,t,e,i):r(m,g,f,e,t,i);if(!(v===to?m===g||a(m,g,n,r,i):v)){d=!1;break}p||(p="constructor"==f)}if(d&&!p){var y=e.constructor,_=t.constructor;y!=_&&"constructor"in e&&"constructor"in t&&!("function"==typeof y&&y instanceof y&&"function"==typeof _&&_ instanceof _)&&(d=!1)}return i.delete(e),i.delete(t),d}(e,t,n,r,a,i))}(e,t,n,r,ot,a))}function st(e,t,n,r){var a=n.length,i=a,o=!r;if(null==e)return!i;for(e=k(e);a--;){var s=n[a];if(o&&s[2]?s[1]!==e[s[0]]:!(s[0]in e))return!1}for(;++a<i;){var u=(s=n[a])[0],c=e[u],l=s[1];if(o&&s[2]){if(c===to&&!(u in e))return!1}else{var f=new xe;if(r)var h=r(c,l,u,e,t,f);if(!(h===to?ot(l,c,3,r,f):h))return!1}}return!0}function ut(e){return!(!Da(e)||(t=e,d&&d in t))&&(Ma(e)?_:ls).test(pr(e));var t}function ct(e){return"function"==typeof e?e:null==e?Ni:"object"==typeof e?ba(e)?mt(e[0],e[1]):pt(e):Hi(e)}function lt(e){if(!Zn(e))return G(e);var t=[];for(var n in k(e))E.call(e,n)&&"constructor"!=n&&t.push(n);return t}function ft(e){if(!Da(e))return function(e){var t=[];if(null!=e)for(var n in k(e))t.push(n);return t}(e);var t=Zn(e),n=[];for(var r in e)("constructor"!=r||!t&&E.call(e,r))&&n.push(r);return n}function ht(e,t){return e<t}function dt(e,r){var a=-1,i=Aa(e)?T(e.length):[];return qe(e,function(e,t,n){i[++a]=r(e,t,n)}),i}function pt(t){var n=Wn(t);return 1==n.length&&n[0][2]?er(n[0][0],n[0][1]):function(e){return e===t||st(e,t,n)}}function mt(n,r){return Jn(n)&&Qn(r)?er(dr(n),r):function(e){var t=ni(e,n);return t===to&&t===r?ri(e,n):ot(r,t,3)}}function gt(r,a,i,o,s){r!==a&&Ue(a,function(e,t){if(s||(s=new xe),Da(e))!function(e,t,n,r,a,i,o){var s=rr(e,n),u=rr(t,n),c=o.get(u);if(c)return Te(e,n,c);var l=i?i(s,u,n+"",e,t,o):to,f=l===to;if(f){var h=ba(u),d=!h&&ka(u),p=!h&&!d&&Wa(u);l=u,h||d||p?l=ba(s)?s:xa(s)?rn(s):d?Xt(u,!(f=!1)):p?Qt(u,!(f=!1)):[]:za(u)||_a(u)?_a(l=s)?l=$a(s):Da(s)&&!Ma(s)||(l=Gn(u)):f=!1}f&&(o.set(u,l),a(l,u,r,i,o),o.delete(u)),Te(e,n,l)}(r,a,t,i,gt,o,s);else{var n=o?o(rr(r,t),e,t+"",r,a,s):to;n===to&&(n=e),Te(r,t,n)}},ui)}function vt(e,t){var n=e.length;if(n)return $n(t+=t<0?n:0,n)?e[t]:to}function yt(e,r,n){var a=-1;return r=Hs(r.length?r:[Ni],ru(Rn())),function(e,t){var n=e.length;for(e.sort(t);n--;)e[n]=e[n].value;return e}(dt(e,function(t,e,n){return{criteria:Hs(r,function(e){return e(t)}),index:++a,value:t}}),function(e,t){return function(e,t,n){for(var r=-1,a=e.criteria,i=t.criteria,o=a.length,s=n.length;++r<o;){var u=en(a[r],i[r]);if(u){if(s<=r)return u;var c=n[r];return u*("desc"==c?-1:1)}}return e.index-t.index}(e,t,n)})}function _t(e,t,n){for(var r=-1,a=t.length,i={};++r<a;){var o=t[r],s=Xe(e,o);n(s,o)&&Mt(i,$t(o,e),s)}return i}function bt(e,t,n,r){var a=r?Ks:Js,i=-1,o=t.length,s=e;for(e===t&&(t=rn(t)),n&&(s=Hs(e,ru(n)));++i<o;)for(var u=0,c=t[i],l=n?n(c):c;-1<(u=a(s,l,u,r));)s!==e&&O.call(s,u,1),O.call(e,u,1);return e}function wt(e,t){for(var n=e?t.length:0,r=n-1;n--;){var a=t[n];if(n==r||a!==i){var i=a;$n(a)?O.call(e,a,1):Wt(e,a)}}return e}function At(e,t){return e+q(K()*(t-e+1))}function xt(e,t){var n="";if(!e||t<1||io<t)return n;for(;t%2&&(n+=e),(t=q(t/2))&&(e+=e),t;);return n}function kt(e,t){return or(tr(e,t,Ni),e+"")}function Et(e){return Ee(gi(e))}function St(e,t){var n=gi(e);return cr(n,Pe(t,0,n.length))}function Mt(e,t,n,r){if(!Da(e))return e;for(var a=-1,i=(t=$t(t,e)).length,o=i-1,s=e;null!=s&&++a<i;){var u=dr(t[a]),c=n;if(a!=o){var l=s[u];(c=r?r(l,u,s):to)===to&&(c=Da(l)?l:$n(t[a+1])?[]:{})}Ce(s,u,c),s=s[u]}return e}var Tt=ae?function(e,t){return ae.set(e,t),e}:Ni,Ct=P?function(e,t){return P(e,"toString",{configurable:!0,enumerable:!1,value:Di(t),writable:!0})}:Ni;function Dt(e){return cr(gi(e))}function Ot(e,t,n){var r=-1,a=e.length;t<0&&(t=a<-t?0:a+t),(n=a<n?a:n)<0&&(n+=a),a=n<t?0:n-t>>>0,t>>>=0;for(var i=T(a);++r<a;)i[r]=e[r+t];return i}function jt(e,r){var a;return qe(e,function(e,t,n){return!(a=r(e,t,n))}),!!a}function Nt(e,t,n){var r=0,a=null==e?r:e.length;if("number"==typeof t&&t==t&&a<=2147483647){for(;r<a;){var i=r+a>>>1,o=e[i];null!==o&&!Ya(o)&&(n?o<=t:o<t)?r=i+1:a=i}return a}return zt(e,t,Ni,n)}function zt(e,t,n,r){t=n(t);for(var a=0,i=null==e?0:e.length,o=t!=t,s=null===t,u=Ya(t),c=t===to;a<i;){var l=q((a+i)/2),f=n(e[l]),h=f!==to,d=null===f,p=f==f,m=Ya(f);if(o)var g=r||p;else g=c?p&&(r||h):s?p&&h&&(r||!d):u?p&&h&&!d&&(r||!m):!d&&!m&&(r?f<=t:f<t);g?a=l+1:i=l}return $(i,4294967294)}function Pt(e,t){for(var n=-1,r=e.length,a=0,i=[];++n<r;){var o=e[n],s=t?t(o):o;if(!n||!ga(s,u)){var u=s;i[a++]=0===o?0:o}}return i}function Lt(e){return"number"==typeof e?e:Ya(e)?oo:+e}function Rt(e){if("string"==typeof e)return e;if(ba(e))return Hs(e,Rt)+"";if(Ya(e))return de?de.call(e):"";var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}function Yt(e,t,n){var r=-1,a=qs,i=e.length,o=!0,s=[],u=s;if(n)o=!1,a=Is;else if(200<=i){var c=t?null:kn(e);if(c)return mu(c);o=!1,a=iu,u=new Ae}else u=t?[]:s;e:for(;++r<i;){var l=e[r],f=t?t(l):l;if(l=n||0!==l?l:0,o&&f==f){for(var h=u.length;h--;)if(u[h]===f)continue e;t&&u.push(f),s.push(l)}else a(u,f,n)||(u!==s&&u.push(f),s.push(l))}return s}function Wt(e,t){return null==(e=nr(e,t=$t(t,e)))||delete e[dr(Sr(t))]}function qt(e,t,n,r){return Mt(e,t,n(Xe(e,t)),r)}function It(e,t,n,r){for(var a=e.length,i=r?a:-1;(r?i--:++i<a)&&t(e[i],i,e););return n?Ot(e,r?0:i,r?i+1:a):Ot(e,r?i+1:0,r?a:i)}function Ht(e,t){var n=e;return n instanceof ye&&(n=n.value()),Bs(t,function(e,t){return t.func.apply(t.thisArg,Fs([e],t.args))},n)}function Ft(e,t,n){var r=e.length;if(r<2)return r?Yt(e[0]):[];for(var a=-1,i=T(r);++a<r;)for(var o=e[a],s=-1;++s<r;)s!=a&&(i[a]=We(i[a]||o,e[s],t,n));return Yt(Ge(i,1),t,n)}function Bt(e,t,n){for(var r=-1,a=e.length,i=t.length,o={};++r<a;){var s=r<i?t[r]:to;n(o,e[r],s)}return o}function Gt(e){return xa(e)?e:[]}function Ut(e){return"function"==typeof e?e:Ni}function $t(e,t){return ba(e)?e:Jn(e,t)?[e]:hr(Va(e))}var Vt=kt;function Jt(e,t,n){var r=e.length;return n=n===to?r:n,!t&&r<=n?e:Ot(e,t,n)}var Kt=L||function(e){return Ss.clearTimeout(e)};function Xt(e,t){if(t)return e.slice();var n=e.length,r=x?x(n):new e.constructor(n);return e.copy(r),r}function Zt(e){var t=new e.constructor(e.byteLength);return new A(t).set(new A(e)),t}function Qt(e,t){var n=t?Zt(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}function en(e,t){if(e!==t){var n=e!==to,r=null===e,a=e==e,i=Ya(e),o=t!==to,s=null===t,u=t==t,c=Ya(t);if(!s&&!c&&!i&&t<e||i&&o&&u&&!s&&!c||r&&o&&u||!n&&u||!a)return 1;if(!r&&!i&&!c&&e<t||c&&n&&a&&!r&&!i||s&&n&&a||!o&&a||!u)return-1}return 0}function tn(e,t,n,r){for(var a=-1,i=e.length,o=n.length,s=-1,u=t.length,c=U(i-o,0),l=T(u+c),f=!r;++s<u;)l[s]=t[s];for(;++a<o;)(f||a<i)&&(l[n[a]]=e[a]);for(;c--;)l[s++]=e[a++];return l}function nn(e,t,n,r){for(var a=-1,i=e.length,o=-1,s=n.length,u=-1,c=t.length,l=U(i-s,0),f=T(l+c),h=!r;++a<l;)f[a]=e[a];for(var d=a;++u<c;)f[d+u]=t[u];for(;++o<s;)(h||a<i)&&(f[d+n[o]]=e[a++]);return f}function rn(e,t){var n=-1,r=e.length;for(t||(t=T(r));++n<r;)t[n]=e[n];return t}function an(e,t,n,r){var a=!n;n||(n={});for(var i=-1,o=t.length;++i<o;){var s=t[i],u=r?r(n[s],e[s],s,n,e):to;u===to&&(u=e[s]),a?Ne(n,s,u):Ce(n,s,u)}return n}function on(a,i){return function(e,t){var n=ba(e)?Ps:Oe,r=i?i():{};return n(e,a,Rn(t,2),r)}}function sn(s){return kt(function(e,t){var n=-1,r=t.length,a=1<r?t[r-1]:to,i=2<r?t[2]:to;for(a=3<s.length&&"function"==typeof a?(r--,a):to,i&&Vn(t[0],t[1],i)&&(a=r<3?to:a,r=1),e=k(e);++n<r;){var o=t[n];o&&s(e,o,n,a)}return e})}function un(i,o){return function(e,t){if(null==e)return e;if(!Aa(e))return i(e,t);for(var n=e.length,r=o?n:-1,a=k(e);(o?r--:++r<n)&&!1!==t(a[r],r,a););return e}}function cn(u){return function(e,t,n){for(var r=-1,a=k(e),i=n(e),o=i.length;o--;){var s=i[u?o:++r];if(!1===t(a[s],s,a))break}return e}}function ln(a){return function(e){var t=fu(e=Va(e))?vu(e):to,n=t?t[0]:e.charAt(0),r=t?Jt(t,1).join(""):e.slice(1);return n[a]()+r}}function fn(t){return function(e){return Bs(Mi(_i(e).replace(gs,"")),t,"")}}function hn(r){return function(){var e=arguments;switch(e.length){case 0:return new r;case 1:return new r(e[0]);case 2:return new r(e[0],e[1]);case 3:return new r(e[0],e[1],e[2]);case 4:return new r(e[0],e[1],e[2],e[3]);case 5:return new r(e[0],e[1],e[2],e[3],e[4]);case 6:return new r(e[0],e[1],e[2],e[3],e[4],e[5]);case 7:return new r(e[0],e[1],e[2],e[3],e[4],e[5],e[6])}var t=me(r.prototype),n=r.apply(t,e);return Da(n)?n:t}}function dn(o){return function(e,t,n){var r=k(e);if(!Aa(e)){var a=Rn(t,3);e=si(e),t=function(e){return a(r[e],e,r)}}var i=o(e,t,n);return-1<i?r[a?e[i]:i]:to}}function pn(u){return On(function(a){var i=a.length,e=i,t=ve.prototype.thru;for(u&&a.reverse();e--;){var n=a[e];if("function"!=typeof n)throw new C(no);if(t&&!o&&"wrapper"==Pn(n))var o=new ve([],!0)}for(e=o?e:i;++e<i;){var r=Pn(n=a[e]),s="wrapper"==r?zn(n):to;o=s&&Kn(s[0])&&424==s[1]&&!s[4].length&&1==s[9]?o[Pn(s[0])].apply(o,s[3]):1==n.length&&Kn(n)?o[r]():o.thru(n)}return function(){var e=arguments,t=e[0];if(o&&1==e.length&&ba(t))return o.plant(t).value();for(var n=0,r=i?a[n].apply(this,e):t;++n<i;)r=a[n].call(this,r);return r}})}function mn(c,l,f,h,d,p,m,g,v,y){var _=128&l,b=1&l,w=2&l,A=24&l,x=512&l,k=w?to:hn(c);return function e(){for(var t=arguments.length,n=T(t),r=t;r--;)n[r]=arguments[r];if(A)var a=Ln(e),i=function(e,t){for(var n=e.length,r=0;n--;)e[n]===t&&++r;return r}(n,a);if(h&&(n=tn(n,h,d,A)),p&&(n=nn(n,p,m,A)),t-=i,A&&t<y){var o=pu(n,a);return An(c,l,mn,e.placeholder,f,n,o,g,v,y-t)}var s=b?f:this,u=w?s[c]:c;return t=n.length,g?n=function(e,t){for(var n=e.length,r=$(t.length,n),a=rn(e);r--;){var i=t[r];e[r]=$n(i,n)?a[i]:to}return e}(n,g):x&&1<t&&n.reverse(),_&&v<t&&(n.length=v),this&&this!==Ss&&this instanceof e&&(u=k||hn(u)),u.apply(s,n)}}function gn(o,s){return function(e,t){return n=e,r=o,a=s(t),i={},Ve(n,function(e,t,n){r(i,a(e),t,n)}),i;var n,r,a,i}}function vn(r,a){return function(e,t){var n;if(e===to&&t===to)return a;if(e!==to&&(n=e),t!==to){if(n===to)return t;t="string"==typeof e||"string"==typeof t?(e=Rt(e),Rt(t)):(e=Lt(e),Lt(t)),n=r(e,t)}return n}}function yn(r){return On(function(e){return e=Hs(e,ru(Rn())),kt(function(t){var n=this;return r(e,function(e){return zs(e,n,t)})})})}function _n(e,t){var n=(t=t===to?" ":Rt(t)).length;if(n<2)return n?xt(t,e):t;var r=xt(t,W(e/gu(t)));return fu(t)?Jt(vu(r),0,e).join(""):r.slice(0,e)}function bn(r){return function(e,t,n){return n&&"number"!=typeof n&&Vn(e,t,n)&&(t=n=to),e=Fa(e),t===to?(t=e,e=0):t=Fa(t),function(e,t,n,r){for(var a=-1,i=U(W((t-e)/(n||1)),0),o=T(i);i--;)o[r?i:++a]=e,e+=n;return o}(e,t,n=n===to?e<t?1:-1:Fa(n),r)}}function wn(n){return function(e,t){return"string"==typeof e&&"string"==typeof t||(e=Ua(e),t=Ua(t)),n(e,t)}}function An(e,t,n,r,a,i,o,s,u,c){var l=8&t;t|=l?32:64,4&(t&=~(l?64:32))||(t&=-4);var f=[e,t,a,l?i:to,l?o:to,l?to:i,l?to:o,s,u,c],h=n.apply(to,f);return Kn(e)&&ar(h,f),h.placeholder=r,sr(h,e,t)}function xn(e){var r=i[e];return function(e,t){if(e=Ua(e),(t=null==t?0:$(Ba(t),292))&&F(e)){var n=(Va(e)+"e").split("e");return+((n=(Va(r(n[0]+"e"+(+n[1]+t)))+"e").split("e"))[0]+"e"+(+n[1]-t))}return r(e)}}var kn=te&&1/mu(new te([,-0]))[1]==1/0?function(e){return new te(e)}:Yi;function En(o){return function(e){var t,n,r,a,i=Fn(e);return i==vo?hu(e):i==Ao?(t=e,n=-1,r=Array(t.size),t.forEach(function(e){r[++n]=[e,e]}),r):Hs(o(a=e),function(e){return[e,a[e]]})}}function Sn(e,t,n,r,a,i,o,s){var u=2&t;if(!u&&"function"!=typeof e)throw new C(no);var c=r?r.length:0;if(c||(t&=-97,r=a=to),o=o===to?o:U(Ba(o),0),s=s===to?s:Ba(s),c-=a?a.length:0,64&t){var l=r,f=a;r=a=to}var h,d,p,m,g,v,y,_,b,w,A,x,k,E=u?to:zn(e),S=[e,t,n,r,a,l,f,i,o,s];if(E&&function(e,t){var n=e[1],r=t[1],a=n|r,i=a<131,o=128==r&&8==n||128==r&&256==n&&e[7].length<=t[8]||384==r&&t[7].length<=t[8]&&8==n;if(i||o){1&r&&(e[2]=t[2],a|=1&n?0:4);var s=t[3];if(s){var u=e[3];e[3]=u?tn(u,s,t[4]):s,e[4]=u?pu(e[3],ao):t[4]}(s=t[5])&&(u=e[5],e[5]=u?nn(u,s,t[6]):s,e[6]=u?pu(e[5],ao):t[6]),(s=t[7])&&(e[7]=s),128&r&&(e[8]=null==e[8]?t[8]:$(e[8],t[8])),null==e[9]&&(e[9]=t[9]),e[0]=t[0],e[1]=a}}(S,E),e=S[0],t=S[1],n=S[2],r=S[3],a=S[4],!(s=S[9]=S[9]===to?u?0:e.length:U(S[9]-c,0))&&24&t&&(t&=-25),t&&1!=t)M=8==t||16==t?(y=t,_=s,b=hn(v=e),function e(){for(var t=arguments.length,n=T(t),r=t,a=Ln(e);r--;)n[r]=arguments[r];var i=t<3&&n[0]!==a&&n[t-1]!==a?[]:pu(n,a);return(t-=i.length)<_?An(v,y,mn,e.placeholder,to,n,i,to,to,_-t):zs(this&&this!==Ss&&this instanceof e?b:v,this,n)}):32!=t&&33!=t||a.length?mn.apply(to,S):(d=n,p=r,m=1&t,g=hn(h=e),function e(){for(var t=-1,n=arguments.length,r=-1,a=p.length,i=T(a+n),o=this&&this!==Ss&&this instanceof e?g:h;++r<a;)i[r]=p[r];for(;n--;)i[r++]=arguments[++t];return zs(o,m?d:this,i)});else var M=(A=n,x=1&t,k=hn(w=e),function e(){return(this&&this!==Ss&&this instanceof e?k:w).apply(x?A:this,arguments)});return sr((E?Tt:ar)(M,S),e,t)}function Mn(e,t,n,r){return e===to||ga(e,f[n])&&!E.call(r,n)?t:e}function Tn(e,t,n,r,a,i){return Da(e)&&Da(t)&&(i.set(t,e),gt(e,t,to,Tn,i),i.delete(t)),e}function Cn(e){return za(e)?to:e}function Dn(e,t,n,r,a,i){var o=1&n,s=e.length,u=t.length;if(s!=u&&!(o&&s<u))return!1;var c=i.get(e);if(c&&i.get(t))return c==t;var l=-1,f=!0,h=2&n?new Ae:to;for(i.set(e,t),i.set(t,e);++l<s;){var d=e[l],p=t[l];if(r)var m=o?r(p,d,l,t,e,i):r(d,p,l,e,t,i);if(m!==to){if(m)continue;f=!1;break}if(h){if(!Us(t,function(e,t){if(!iu(h,t)&&(d===e||a(d,e,n,r,i)))return h.push(t)})){f=!1;break}}else if(d!==p&&!a(d,p,n,r,i)){f=!1;break}}return i.delete(e),i.delete(t),f}function On(e){return or(tr(e,to,wr),e+"")}function jn(e){return Ze(e,si,In)}function Nn(e){return Ze(e,ui,Hn)}var zn=ae?function(e){return ae.get(e)}:Yi;function Pn(e){for(var t=e.name+"",n=ie[t],r=E.call(ie,t)?n.length:0;r--;){var a=n[r],i=a.func;if(null==i||i==e)return a.name}return t}function Ln(e){return(E.call(pe,"placeholder")?pe:e).placeholder}function Rn(){var e=pe.iteratee||zi;return e=e===zi?ct:e,arguments.length?e(arguments[0],arguments[1]):e}function Yn(e,t){var n,r,a=e.__data__;return("string"==(r=typeof(n=t))||"number"==r||"symbol"==r||"boolean"==r?"__proto__"!==n:null===n)?a["string"==typeof t?"string":"hash"]:a.map}function Wn(e){for(var t=si(e),n=t.length;n--;){var r=t[n],a=e[r];t[n]=[r,a,Qn(a)]}return t}function qn(e,t){var n,r,a=(r=t,null==(n=e)?to:n[r]);return ut(a)?a:to}var In=I?function(t){return null==t?[]:(t=k(t),Ws(I(t),function(e){return D.call(t,e)}))}:Gi,Hn=I?function(e){for(var t=[];e;)Fs(t,In(e)),e=S(e);return t}:Gi,Fn=Qe;function Bn(e,t,n){for(var r=-1,a=(t=$t(t,e)).length,i=!1;++r<a;){var o=dr(t[r]);if(!(i=null!=e&&n(e,o)))break;e=e[o]}return i||++r!=a?i:!!(a=null==e?0:e.length)&&Ca(a)&&$n(o,a)&&(ba(e)||_a(e))}function Gn(e){return"function"!=typeof e.constructor||Zn(e)?{}:me(S(e))}function Un(e){return ba(e)||_a(e)||!!(j&&e&&e[j])}function $n(e,t){var n=typeof e;return!!(t=null==t?io:t)&&("number"==n||"symbol"!=n&&hs.test(e))&&-1<e&&e%1==0&&e<t}function Vn(e,t,n){if(!Da(n))return!1;var r=typeof t;return!!("number"==r?Aa(n)&&$n(t,n.length):"string"==r&&t in n)&&ga(n[t],e)}function Jn(e,t){if(ba(e))return!1;var n=typeof e;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=e&&!Ya(e))||Vo.test(e)||!$o.test(e)||null!=t&&e in k(t)}function Kn(e){var t=Pn(e),n=pe[t];if("function"!=typeof n||!(t in ye.prototype))return!1;if(e===n)return!0;var r=zn(n);return!!r&&e===r[0]}(Z&&Fn(new Z(new ArrayBuffer(1)))!=Mo||Q&&Fn(new Q)!=vo||ee&&Fn(ee.resolve())!=bo||te&&Fn(new te)!=Ao||ne&&Fn(new ne)!=Eo)&&(Fn=function(e){var t=Qe(e),n=t==_o?e.constructor:to,r=n?pr(n):"";if(r)switch(r){case oe:return Mo;case se:return vo;case ue:return bo;case ce:return Ao;case le:return Eo}return t});var Xn=u?Ma:Ui;function Zn(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||f)}function Qn(e){return e==e&&!Da(e)}function er(t,n){return function(e){return null!=e&&e[t]===n&&(n!==to||t in k(e))}}function tr(i,o,s){return o=U(o===to?i.length-1:o,0),function(){for(var e=arguments,t=-1,n=U(e.length-o,0),r=T(n);++t<n;)r[t]=e[o+t];t=-1;for(var a=T(o+1);++t<o;)a[t]=e[t];return a[o]=s(r),zs(i,this,a)}}function nr(e,t){return t.length<2?e:Xe(e,Ot(t,0,-1))}function rr(e,t){if(("constructor"!==t||"function"!=typeof e[t])&&"__proto__"!=t)return e[t]}var ar=ur(Tt),ir=Y||function(e,t){return Ss.setTimeout(e,t)},or=ur(Ct);function sr(e,t,n){var r,a,i,o=t+"";return or(e,function(e,t){var n=t.length;if(!n)return e;var r=n-1;return t[r]=(1<n?"& ":"")+t[r],t=t.join(2<n?", ":" "),e.replace(ts,"{\n/* [wrapped with "+t+"] */\n")}(o,(i=o.match(ns),r=i?i[1].split(rs):[],a=n,Ls(uo,function(e){var t="_."+e[0];a&e[1]&&!qs(r,t)&&r.push(t)}),r.sort())))}function ur(n){var r=0,a=0;return function(){var e=V(),t=16-(e-a);if(a=e,0<t){if(800<=++r)return arguments[0]}else r=0;return n.apply(to,arguments)}}function cr(e,t){var n=-1,r=e.length,a=r-1;for(t=t===to?r:t;++n<t;){var i=At(n,a),o=e[i];e[i]=e[n],e[n]=o}return e.length=t,e}var lr,fr,hr=(fr=(lr=la(function(e){var a=[];return 46===e.charCodeAt(0)&&a.push(""),e.replace(Jo,function(e,t,n,r){a.push(n?r.replace(is,"$1"):t||e)}),a},function(e){return 500===fr.size&&fr.clear(),e})).cache,lr);function dr(e){if("string"==typeof e||Ya(e))return e;var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}function pr(e){if(null!=e){try{return c.call(e)}catch(e){}try{return e+""}catch(e){}}return""}function mr(e){if(e instanceof ye)return e.clone();var t=new ve(e.__wrapped__,e.__chain__);return t.__actions__=rn(e.__actions__),t.__index__=e.__index__,t.__values__=e.__values__,t}var gr=kt(function(e,t){return xa(e)?We(e,Ge(t,1,xa,!0)):[]}),vr=kt(function(e,t){var n=Sr(t);return xa(n)&&(n=to),xa(e)?We(e,Ge(t,1,xa,!0),Rn(n,2)):[]}),yr=kt(function(e,t){var n=Sr(t);return xa(n)&&(n=to),xa(e)?We(e,Ge(t,1,xa,!0),to,n):[]});function _r(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var a=null==n?0:Ba(n);return a<0&&(a=U(r+a,0)),Vs(e,Rn(t,3),a)}function br(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var a=r-1;return n!==to&&(a=Ba(n),a=n<0?U(r+a,0):$(a,r-1)),Vs(e,Rn(t,3),a,!0)}function wr(e){return null!=e&&e.length?Ge(e,1):[]}function Ar(e){return e&&e.length?e[0]:to}var xr=kt(function(e){var t=Hs(e,Gt);return t.length&&t[0]===e[0]?rt(t):[]}),kr=kt(function(e){var t=Sr(e),n=Hs(e,Gt);return t===Sr(n)?t=to:n.pop(),n.length&&n[0]===e[0]?rt(n,Rn(t,2)):[]}),Er=kt(function(e){var t=Sr(e),n=Hs(e,Gt);return(t="function"==typeof t?t:to)&&n.pop(),n.length&&n[0]===e[0]?rt(n,to,t):[]});function Sr(e){var t=null==e?0:e.length;return t?e[t-1]:to}var Mr=kt(Tr);function Tr(e,t){return e&&e.length&&t&&t.length?bt(e,t):e}var Cr=On(function(e,t){var n=null==e?0:e.length,r=ze(e,t);return wt(e,Hs(t,function(e){return $n(e,n)?+e:e}).sort(en)),r});function Dr(e){return null==e?e:X.call(e)}var Or=kt(function(e){return Yt(Ge(e,1,xa,!0))}),jr=kt(function(e){var t=Sr(e);return xa(t)&&(t=to),Yt(Ge(e,1,xa,!0),Rn(t,2))}),Nr=kt(function(e){var t=Sr(e);return t="function"==typeof t?t:to,Yt(Ge(e,1,xa,!0),to,t)});function zr(t){if(!t||!t.length)return[];var n=0;return t=Ws(t,function(e){if(xa(e))return n=U(e.length,n),!0}),nu(n,function(e){return Hs(t,Qs(e))})}function Pr(e,t){if(!e||!e.length)return[];var n=zr(e);return null==t?n:Hs(n,function(e){return zs(t,to,e)})}var Lr=kt(function(e,t){return xa(e)?We(e,t):[]}),Rr=kt(function(e){return Ft(Ws(e,xa))}),Yr=kt(function(e){var t=Sr(e);return xa(t)&&(t=to),Ft(Ws(e,xa),Rn(t,2))}),Wr=kt(function(e){var t=Sr(e);return t="function"==typeof t?t:to,Ft(Ws(e,xa),to,t)}),qr=kt(zr);var Ir=kt(function(e){var t=e.length,n=1<t?e[t-1]:to;return Pr(e,n="function"==typeof n?(e.pop(),n):to)});function Hr(e){var t=pe(e);return t.__chain__=!0,t}function Fr(e,t){return t(e)}var Br=On(function(t){var n=t.length,e=n?t[0]:0,r=this.__wrapped__,a=function(e){return ze(e,t)};return!(1<n||this.__actions__.length)&&r instanceof ye&&$n(e)?((r=r.slice(e,+e+(n?1:0))).__actions__.push({func:Fr,args:[a],thisArg:to}),new ve(r,this.__chain__).thru(function(e){return n&&!e.length&&e.push(to),e})):this.thru(a)});var Gr=on(function(e,t,n){E.call(e,n)?++e[n]:Ne(e,n,1)});var Ur=dn(_r),$r=dn(br);function Vr(e,t){return(ba(e)?Ls:qe)(e,Rn(t,3))}function Jr(e,t){return(ba(e)?Rs:Ie)(e,Rn(t,3))}var Kr=on(function(e,t,n){E.call(e,n)?e[n].push(t):Ne(e,n,[t])});var Xr=kt(function(e,t,n){var r=-1,a="function"==typeof t,i=Aa(e)?T(e.length):[];return qe(e,function(e){i[++r]=a?zs(t,e,n):at(e,t,n)}),i}),Zr=on(function(e,t,n){Ne(e,n,t)});function Qr(e,t){return(ba(e)?Hs:dt)(e,Rn(t,3))}var ea=on(function(e,t,n){e[n?0:1].push(t)},function(){return[[],[]]});var ta=kt(function(e,t){if(null==e)return[];var n=t.length;return 1<n&&Vn(e,t[0],t[1])?t=[]:2<n&&Vn(t[0],t[1],t[2])&&(t=[t[0]]),yt(e,Ge(t,1),[])}),na=R||function(){return Ss.Date.now()};function ra(e,t,n){return t=n?to:t,t=e&&null==t?e.length:t,Sn(e,128,to,to,to,to,t)}function aa(e,t){var n;if("function"!=typeof t)throw new C(no);return e=Ba(e),function(){return 0<--e&&(n=t.apply(this,arguments)),e<=1&&(t=to),n}}var ia=kt(function(e,t,n){var r=1;if(n.length){var a=pu(n,Ln(ia));r|=32}return Sn(e,r,t,n,a)}),oa=kt(function(e,t,n){var r=3;if(n.length){var a=pu(n,Ln(oa));r|=32}return Sn(t,r,e,n,a)});function sa(r,a,e){var i,o,s,u,c,l,f=0,h=!1,d=!1,t=!0;if("function"!=typeof r)throw new C(no);function p(e){var t=i,n=o;return i=o=to,f=e,u=r.apply(n,t)}function m(e){var t=e-l;return l===to||a<=t||t<0||d&&s<=e-f}function g(){var e,t,n=na();if(m(n))return v(n);c=ir(g,(t=a-((e=n)-l),d?$(t,s-(e-f)):t))}function v(e){return c=to,t&&i?p(e):(i=o=to,u)}function n(){var e,t=na(),n=m(t);if(i=arguments,o=this,l=t,n){if(c===to)return f=e=l,c=ir(g,a),h?p(e):u;if(d)return Kt(c),c=ir(g,a),p(l)}return c===to&&(c=ir(g,a)),u}return a=Ua(a)||0,Da(e)&&(h=!!e.leading,s=(d="maxWait"in e)?U(Ua(e.maxWait)||0,a):s,t="trailing"in e?!!e.trailing:t),n.cancel=function(){c!==to&&Kt(c),f=0,i=l=o=c=to},n.flush=function(){return c===to?u:v(na())},n}var ua=kt(function(e,t){return Ye(e,1,t)}),ca=kt(function(e,t,n){return Ye(e,Ua(t)||0,n)});function la(a,i){if("function"!=typeof a||null!=i&&"function"!=typeof i)throw new C(no);var o=function(){var e=arguments,t=i?i.apply(this,e):e[0],n=o.cache;if(n.has(t))return n.get(t);var r=a.apply(this,e);return o.cache=n.set(t,r)||n,r};return o.cache=new(la.Cache||we),o}function fa(t){if("function"!=typeof t)throw new C(no);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}la.Cache=we;var ha=Vt(function(r,a){var i=(a=1==a.length&&ba(a[0])?Hs(a[0],ru(Rn())):Hs(Ge(a,1),ru(Rn()))).length;return kt(function(e){for(var t=-1,n=$(e.length,i);++t<n;)e[t]=a[t].call(this,e[t]);return zs(r,this,e)})}),da=kt(function(e,t){var n=pu(t,Ln(da));return Sn(e,32,to,t,n)}),pa=kt(function(e,t){var n=pu(t,Ln(pa));return Sn(e,64,to,t,n)}),ma=On(function(e,t){return Sn(e,256,to,to,to,t)});function ga(e,t){return e===t||e!=e&&t!=t}var va=wn(et),ya=wn(function(e,t){return t<=e}),_a=it(function(){return arguments}())?it:function(e){return Oa(e)&&E.call(e,"callee")&&!D.call(e,"callee")},ba=T.isArray,wa=Ts?ru(Ts):function(e){return Oa(e)&&Qe(e)==So};function Aa(e){return null!=e&&Ca(e.length)&&!Ma(e)}function xa(e){return Oa(e)&&Aa(e)}var ka=H||Ui,Ea=Cs?ru(Cs):function(e){return Oa(e)&&Qe(e)==ho};function Sa(e){if(!Oa(e))return!1;var t=Qe(e);return t==po||"[object DOMException]"==t||"string"==typeof e.message&&"string"==typeof e.name&&!za(e)}function Ma(e){if(!Da(e))return!1;var t=Qe(e);return t==mo||t==go||"[object AsyncFunction]"==t||"[object Proxy]"==t}function Ta(e){return"number"==typeof e&&e==Ba(e)}function Ca(e){return"number"==typeof e&&-1<e&&e%1==0&&e<=io}function Da(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}function Oa(e){return null!=e&&"object"==typeof e}var ja=Ds?ru(Ds):function(e){return Oa(e)&&Fn(e)==vo};function Na(e){return"number"==typeof e||Oa(e)&&Qe(e)==yo}function za(e){if(!Oa(e)||Qe(e)!=_o)return!1;var t=S(e);if(null===t)return!0;var n=E.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&c.call(n)==m}var Pa=Os?ru(Os):function(e){return Oa(e)&&Qe(e)==wo};var La=js?ru(js):function(e){return Oa(e)&&Fn(e)==Ao};function Ra(e){return"string"==typeof e||!ba(e)&&Oa(e)&&Qe(e)==xo}function Ya(e){return"symbol"==typeof e||Oa(e)&&Qe(e)==ko}var Wa=Ns?ru(Ns):function(e){return Oa(e)&&Ca(e.length)&&!!As[Qe(e)]};var qa=wn(ht),Ia=wn(function(e,t){return e<=t});function Ha(e){if(!e)return[];if(Aa(e))return Ra(e)?vu(e):rn(e);if(N&&e[N])return function(e){for(var t,n=[];!(t=e.next()).done;)n.push(t.value);return n}(e[N]());var t=Fn(e);return(t==vo?hu:t==Ao?mu:gi)(e)}function Fa(e){return e?(e=Ua(e))!==1/0&&e!==-1/0?e==e?e:0:17976931348623157e292*(e<0?-1:1):0===e?e:0}function Ba(e){var t=Fa(e),n=t%1;return t==t?n?t-n:t:0}function Ga(e){return e?Pe(Ba(e),0,so):0}function Ua(e){if("number"==typeof e)return e;if(Ya(e))return oo;if(Da(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=Da(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(Zo,"");var n=cs.test(e);return n||fs.test(e)?Es(e.slice(2),n?2:8):us.test(e)?oo:+e}function $a(e){return an(e,ui(e))}function Va(e){return null==e?"":Rt(e)}var Ja=sn(function(e,t){if(Zn(t)||Aa(t))an(t,si(t),e);else for(var n in t)E.call(t,n)&&Ce(e,n,t[n])}),Ka=sn(function(e,t){an(t,ui(t),e)}),Xa=sn(function(e,t,n,r){an(t,ui(t),e,r)}),Za=sn(function(e,t,n,r){an(t,si(t),e,r)}),Qa=On(ze);var ei=kt(function(e,t){e=k(e);var n=-1,r=t.length,a=2<r?t[2]:to;for(a&&Vn(t[0],t[1],a)&&(r=1);++n<r;)for(var i=t[n],o=ui(i),s=-1,u=o.length;++s<u;){var c=o[s],l=e[c];(l===to||ga(l,f[c])&&!E.call(e,c))&&(e[c]=i[c])}return e}),ti=kt(function(e){return e.push(to,Tn),zs(li,to,e)});function ni(e,t,n){var r=null==e?to:Xe(e,t);return r===to?n:r}function ri(e,t){return null!=e&&Bn(e,t,nt)}var ai=gn(function(e,t,n){null!=t&&"function"!=typeof t.toString&&(t=p.call(t)),e[t]=n},Di(Ni)),ii=gn(function(e,t,n){null!=t&&"function"!=typeof t.toString&&(t=p.call(t)),E.call(e,t)?e[t].push(n):e[t]=[n]},Rn),oi=kt(at);function si(e){return Aa(e)?ke(e):lt(e)}function ui(e){return Aa(e)?ke(e,!0):ft(e)}var ci=sn(function(e,t,n){gt(e,t,n)}),li=sn(function(e,t,n,r){gt(e,t,n,r)}),fi=On(function(t,e){var n={};if(null==t)return n;var r=!1;e=Hs(e,function(e){return e=$t(e,t),r||(r=1<e.length),e}),an(t,Nn(t),n),r&&(n=Le(n,7,Cn));for(var a=e.length;a--;)Wt(n,e[a]);return n});var hi=On(function(e,t){return null==e?{}:_t(n=e,t,function(e,t){return ri(n,t)});var n});function di(e,n){if(null==e)return{};var t=Hs(Nn(e),function(e){return[e]});return n=Rn(n),_t(e,t,function(e,t){return n(e,t[0])})}var pi=En(si),mi=En(ui);function gi(e){return null==e?[]:au(e,si(e))}var vi=fn(function(e,t,n){return t=t.toLowerCase(),e+(n?yi(t):t)});function yi(e){return Si(Va(e).toLowerCase())}function _i(e){return(e=Va(e))&&e.replace(ds,uu).replace(vs,"")}var bi=fn(function(e,t,n){return e+(n?"-":"")+t.toLowerCase()}),wi=fn(function(e,t,n){return e+(n?" ":"")+t.toLowerCase()}),Ai=ln("toLowerCase");var xi=fn(function(e,t,n){return e+(n?"_":"")+t.toLowerCase()});var ki=fn(function(e,t,n){return e+(n?" ":"")+Si(t)});var Ei=fn(function(e,t,n){return e+(n?" ":"")+t.toUpperCase()}),Si=ln("toUpperCase");function Mi(e,t,n){return e=Va(e),(t=n?to:t)===to?(r=e,_s.test(r)?e.match(ys)||[]:e.match(as)||[]):e.match(t)||[];var r}var Ti=kt(function(e,t){try{return zs(e,to,t)}catch(e){return Sa(e)?e:new a(e)}}),Ci=On(function(t,e){return Ls(e,function(e){e=dr(e),Ne(t,e,ia(t[e],t))}),t});function Di(e){return function(){return e}}var Oi=pn(),ji=pn(!0);function Ni(e){return e}function zi(e){return ct("function"==typeof e?e:Le(e,1))}var Pi=kt(function(t,n){return function(e){return at(e,t,n)}}),Li=kt(function(t,n){return function(e){return at(t,e,n)}});function Ri(r,t,e){var n=si(t),a=Ke(t,n);null!=e||Da(t)&&(a.length||!n.length)||(e=t,t=r,r=this,a=Ke(t,si(t)));var i=!(Da(e)&&"chain"in e&&!e.chain),o=Ma(r);return Ls(a,function(e){var n=t[e];r[e]=n,o&&(r.prototype[e]=function(){var e=this.__chain__;if(i||e){var t=r(this.__wrapped__);return(t.__actions__=rn(this.__actions__)).push({func:n,args:arguments,thisArg:r}),t.__chain__=e,t}return n.apply(r,Fs([this.value()],arguments))})}),r}function Yi(){}var Wi=yn(Hs),qi=yn(Ys),Ii=yn(Us);function Hi(e){return Jn(e)?Qs(dr(e)):(t=e,function(e){return Xe(e,t)});var t}var Fi=bn(),Bi=bn(!0);function Gi(){return[]}function Ui(){return!1}var $i=vn(function(e,t){return e+t},0),Vi=xn("ceil"),Ji=vn(function(e,t){return e/t},1),Ki=xn("floor");var Xi,Zi=vn(function(e,t){return e*t},1),Qi=xn("round"),eo=vn(function(e,t){return e-t},0);return pe.after=function(e,t){if("function"!=typeof t)throw new C(no);return e=Ba(e),function(){if(--e<1)return t.apply(this,arguments)}},pe.ary=ra,pe.assign=Ja,pe.assignIn=Ka,pe.assignInWith=Xa,pe.assignWith=Za,pe.at=Qa,pe.before=aa,pe.bind=ia,pe.bindAll=Ci,pe.bindKey=oa,pe.castArray=function(){if(!arguments.length)return[];var e=arguments[0];return ba(e)?e:[e]},pe.chain=Hr,pe.chunk=function(e,t,n){t=(n?Vn(e,t,n):t===to)?1:U(Ba(t),0);var r=null==e?0:e.length;if(!r||t<1)return[];for(var a=0,i=0,o=T(W(r/t));a<r;)o[i++]=Ot(e,a,a+=t);return o},pe.compact=function(e){for(var t=-1,n=null==e?0:e.length,r=0,a=[];++t<n;){var i=e[t];i&&(a[r++]=i)}return a},pe.concat=function(){var e=arguments.length;if(!e)return[];for(var t=T(e-1),n=arguments[0],r=e;r--;)t[r-1]=arguments[r];return Fs(ba(n)?rn(n):[n],Ge(t,1))},pe.cond=function(r){var a=null==r?0:r.length,t=Rn();return r=a?Hs(r,function(e){if("function"!=typeof e[1])throw new C(no);return[t(e[0]),e[1]]}):[],kt(function(e){for(var t=-1;++t<a;){var n=r[t];if(zs(n[0],this,e))return zs(n[1],this,e)}})},pe.conforms=function(e){return t=Le(e,1),n=si(t),function(e){return Re(e,t,n)};var t,n},pe.constant=Di,pe.countBy=Gr,pe.create=function(e,t){var n=me(e);return null==t?n:je(n,t)},pe.curry=function e(t,n,r){var a=Sn(t,8,to,to,to,to,to,n=r?to:n);return a.placeholder=e.placeholder,a},pe.curryRight=function e(t,n,r){var a=Sn(t,16,to,to,to,to,to,n=r?to:n);return a.placeholder=e.placeholder,a},pe.debounce=sa,pe.defaults=ei,pe.defaultsDeep=ti,pe.defer=ua,pe.delay=ca,pe.difference=gr,pe.differenceBy=vr,pe.differenceWith=yr,pe.drop=function(e,t,n){var r=null==e?0:e.length;return r?Ot(e,(t=n||t===to?1:Ba(t))<0?0:t,r):[]},pe.dropRight=function(e,t,n){var r=null==e?0:e.length;return r?Ot(e,0,(t=r-(t=n||t===to?1:Ba(t)))<0?0:t):[]},pe.dropRightWhile=function(e,t){return e&&e.length?It(e,Rn(t,3),!0,!0):[]},pe.dropWhile=function(e,t){return e&&e.length?It(e,Rn(t,3),!0):[]},pe.fill=function(e,t,n,r){var a=null==e?0:e.length;return a?(n&&"number"!=typeof n&&Vn(e,t,n)&&(n=0,r=a),function(e,t,n,r){var a=e.length;for((n=Ba(n))<0&&(n=a<-n?0:a+n),(r=r===to||a<r?a:Ba(r))<0&&(r+=a),r=r<n?0:Ga(r);n<r;)e[n++]=t;return e}(e,t,n,r)):[]},pe.filter=function(e,t){return(ba(e)?Ws:Be)(e,Rn(t,3))},pe.flatMap=function(e,t){return Ge(Qr(e,t),1)},pe.flatMapDeep=function(e,t){return Ge(Qr(e,t),1/0)},pe.flatMapDepth=function(e,t,n){return n=n===to?1:Ba(n),Ge(Qr(e,t),n)},pe.flatten=wr,pe.flattenDeep=function(e){return null!=e&&e.length?Ge(e,1/0):[]},pe.flattenDepth=function(e,t){return null!=e&&e.length?Ge(e,t=t===to?1:Ba(t)):[]},pe.flip=function(e){return Sn(e,512)},pe.flow=Oi,pe.flowRight=ji,pe.fromPairs=function(e){for(var t=-1,n=null==e?0:e.length,r={};++t<n;){var a=e[t];r[a[0]]=a[1]}return r},pe.functions=function(e){return null==e?[]:Ke(e,si(e))},pe.functionsIn=function(e){return null==e?[]:Ke(e,ui(e))},pe.groupBy=Kr,pe.initial=function(e){return null!=e&&e.length?Ot(e,0,-1):[]},pe.intersection=xr,pe.intersectionBy=kr,pe.intersectionWith=Er,pe.invert=ai,pe.invertBy=ii,pe.invokeMap=Xr,pe.iteratee=zi,pe.keyBy=Zr,pe.keys=si,pe.keysIn=ui,pe.map=Qr,pe.mapKeys=function(e,r){var a={};return r=Rn(r,3),Ve(e,function(e,t,n){Ne(a,r(e,t,n),e)}),a},pe.mapValues=function(e,r){var a={};return r=Rn(r,3),Ve(e,function(e,t,n){Ne(a,t,r(e,t,n))}),a},pe.matches=function(e){return pt(Le(e,1))},pe.matchesProperty=function(e,t){return mt(e,Le(t,1))},pe.memoize=la,pe.merge=ci,pe.mergeWith=li,pe.method=Pi,pe.methodOf=Li,pe.mixin=Ri,pe.negate=fa,pe.nthArg=function(t){return t=Ba(t),kt(function(e){return vt(e,t)})},pe.omit=fi,pe.omitBy=function(e,t){return di(e,fa(Rn(t)))},pe.once=function(e){return aa(2,e)},pe.orderBy=function(e,t,n,r){return null==e?[]:(ba(t)||(t=null==t?[]:[t]),ba(n=r?to:n)||(n=null==n?[]:[n]),yt(e,t,n))},pe.over=Wi,pe.overArgs=ha,pe.overEvery=qi,pe.overSome=Ii,pe.partial=da,pe.partialRight=pa,pe.partition=ea,pe.pick=hi,pe.pickBy=di,pe.property=Hi,pe.propertyOf=function(t){return function(e){return null==t?to:Xe(t,e)}},pe.pull=Mr,pe.pullAll=Tr,pe.pullAllBy=function(e,t,n){return e&&e.length&&t&&t.length?bt(e,t,Rn(n,2)):e},pe.pullAllWith=function(e,t,n){return e&&e.length&&t&&t.length?bt(e,t,to,n):e},pe.pullAt=Cr,pe.range=Fi,pe.rangeRight=Bi,pe.rearg=ma,pe.reject=function(e,t){return(ba(e)?Ws:Be)(e,fa(Rn(t,3)))},pe.remove=function(e,t){var n=[];if(!e||!e.length)return n;var r=-1,a=[],i=e.length;for(t=Rn(t,3);++r<i;){var o=e[r];t(o,r,e)&&(n.push(o),a.push(r))}return wt(e,a),n},pe.rest=function(e,t){if("function"!=typeof e)throw new C(no);return kt(e,t=t===to?t:Ba(t))},pe.reverse=Dr,pe.sampleSize=function(e,t,n){return t=(n?Vn(e,t,n):t===to)?1:Ba(t),(ba(e)?Se:St)(e,t)},pe.set=function(e,t,n){return null==e?e:Mt(e,t,n)},pe.setWith=function(e,t,n,r){return r="function"==typeof r?r:to,null==e?e:Mt(e,t,n,r)},pe.shuffle=function(e){return(ba(e)?Me:Dt)(e)},pe.slice=function(e,t,n){var r=null==e?0:e.length;return r?Ot(e,t,n=n&&"number"!=typeof n&&Vn(e,t,n)?(t=0,r):(t=null==t?0:Ba(t),n===to?r:Ba(n))):[]},pe.sortBy=ta,pe.sortedUniq=function(e){return e&&e.length?Pt(e):[]},pe.sortedUniqBy=function(e,t){return e&&e.length?Pt(e,Rn(t,2)):[]},pe.split=function(e,t,n){return n&&"number"!=typeof n&&Vn(e,t,n)&&(t=n=to),(n=n===to?so:n>>>0)?(e=Va(e))&&("string"==typeof t||null!=t&&!Pa(t))&&!(t=Rt(t))&&fu(e)?Jt(vu(e),0,n):e.split(t,n):[]},pe.spread=function(r,a){if("function"!=typeof r)throw new C(no);return a=null==a?0:U(Ba(a),0),kt(function(e){var t=e[a],n=Jt(e,0,a);return t&&Fs(n,t),zs(r,this,n)})},pe.tail=function(e){var t=null==e?0:e.length;return t?Ot(e,1,t):[]},pe.take=function(e,t,n){return e&&e.length?Ot(e,0,(t=n||t===to?1:Ba(t))<0?0:t):[]},pe.takeRight=function(e,t,n){var r=null==e?0:e.length;return r?Ot(e,(t=r-(t=n||t===to?1:Ba(t)))<0?0:t,r):[]},pe.takeRightWhile=function(e,t){return e&&e.length?It(e,Rn(t,3),!1,!0):[]},pe.takeWhile=function(e,t){return e&&e.length?It(e,Rn(t,3)):[]},pe.tap=function(e,t){return t(e),e},pe.throttle=function(e,t,n){var r=!0,a=!0;if("function"!=typeof e)throw new C(no);return Da(n)&&(r="leading"in n?!!n.leading:r,a="trailing"in n?!!n.trailing:a),sa(e,t,{leading:r,maxWait:t,trailing:a})},pe.thru=Fr,pe.toArray=Ha,pe.toPairs=pi,pe.toPairsIn=mi,pe.toPath=function(e){return ba(e)?Hs(e,dr):Ya(e)?[e]:rn(hr(Va(e)))},pe.toPlainObject=$a,pe.transform=function(e,r,a){var t=ba(e),n=t||ka(e)||Wa(e);if(r=Rn(r,4),null==a){var i=e&&e.constructor;a=n?t?new i:[]:Da(e)&&Ma(i)?me(S(e)):{}}return(n?Ls:Ve)(e,function(e,t,n){return r(a,e,t,n)}),a},pe.unary=function(e){return ra(e,1)},pe.union=Or,pe.unionBy=jr,pe.unionWith=Nr,pe.uniq=function(e){return e&&e.length?Yt(e):[]},pe.uniqBy=function(e,t){return e&&e.length?Yt(e,Rn(t,2)):[]},pe.uniqWith=function(e,t){return t="function"==typeof t?t:to,e&&e.length?Yt(e,to,t):[]},pe.unset=function(e,t){return null==e||Wt(e,t)},pe.unzip=zr,pe.unzipWith=Pr,pe.update=function(e,t,n){return null==e?e:qt(e,t,Ut(n))},pe.updateWith=function(e,t,n,r){return r="function"==typeof r?r:to,null==e?e:qt(e,t,Ut(n),r)},pe.values=gi,pe.valuesIn=function(e){return null==e?[]:au(e,ui(e))},pe.without=Lr,pe.words=Mi,pe.wrap=function(e,t){return da(Ut(t),e)},pe.xor=Rr,pe.xorBy=Yr,pe.xorWith=Wr,pe.zip=qr,pe.zipObject=function(e,t){return Bt(e||[],t||[],Ce)},pe.zipObjectDeep=function(e,t){return Bt(e||[],t||[],Mt)},pe.zipWith=Ir,pe.entries=pi,pe.entriesIn=mi,pe.extend=Ka,pe.extendWith=Xa,Ri(pe,pe),pe.add=$i,pe.attempt=Ti,pe.camelCase=vi,pe.capitalize=yi,pe.ceil=Vi,pe.clamp=function(e,t,n){return n===to&&(n=t,t=to),n!==to&&(n=(n=Ua(n))==n?n:0),t!==to&&(t=(t=Ua(t))==t?t:0),Pe(Ua(e),t,n)},pe.clone=function(e){return Le(e,4)},pe.cloneDeep=function(e){return Le(e,5)},pe.cloneDeepWith=function(e,t){return Le(e,5,t="function"==typeof t?t:to)},pe.cloneWith=function(e,t){return Le(e,4,t="function"==typeof t?t:to)},pe.conformsTo=function(e,t){return null==t||Re(e,t,si(t))},pe.deburr=_i,pe.defaultTo=function(e,t){return null==e||e!=e?t:e},pe.divide=Ji,pe.endsWith=function(e,t,n){e=Va(e),t=Rt(t);var r=e.length,a=n=n===to?r:Pe(Ba(n),0,r);return 0<=(n-=t.length)&&e.slice(n,a)==t},pe.eq=ga,pe.escape=function(e){return(e=Va(e))&&Fo.test(e)?e.replace(Io,cu):e},pe.escapeRegExp=function(e){return(e=Va(e))&&Xo.test(e)?e.replace(Ko,"\\$&"):e},pe.every=function(e,t,n){var r=ba(e)?Ys:He;return n&&Vn(e,t,n)&&(t=to),r(e,Rn(t,3))},pe.find=Ur,pe.findIndex=_r,pe.findKey=function(e,t){return $s(e,Rn(t,3),Ve)},pe.findLast=$r,pe.findLastIndex=br,pe.findLastKey=function(e,t){return $s(e,Rn(t,3),Je)},pe.floor=Ki,pe.forEach=Vr,pe.forEachRight=Jr,pe.forIn=function(e,t){return null==e?e:Ue(e,Rn(t,3),ui)},pe.forInRight=function(e,t){return null==e?e:$e(e,Rn(t,3),ui)},pe.forOwn=function(e,t){return e&&Ve(e,Rn(t,3))},pe.forOwnRight=function(e,t){return e&&Je(e,Rn(t,3))},pe.get=ni,pe.gt=va,pe.gte=ya,pe.has=function(e,t){return null!=e&&Bn(e,t,tt)},pe.hasIn=ri,pe.head=Ar,pe.identity=Ni,pe.includes=function(e,t,n,r){e=Aa(e)?e:gi(e),n=n&&!r?Ba(n):0;var a=e.length;return n<0&&(n=U(a+n,0)),Ra(e)?n<=a&&-1<e.indexOf(t,n):!!a&&-1<Js(e,t,n)},pe.indexOf=function(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var a=null==n?0:Ba(n);return a<0&&(a=U(r+a,0)),Js(e,t,a)},pe.inRange=function(e,t,n){return t=Fa(t),n===to?(n=t,t=0):n=Fa(n),e=Ua(e),(r=e)>=$(a=t,i=n)&&r<U(a,i);var r,a,i},pe.invoke=oi,pe.isArguments=_a,pe.isArray=ba,pe.isArrayBuffer=wa,pe.isArrayLike=Aa,pe.isArrayLikeObject=xa,pe.isBoolean=function(e){return!0===e||!1===e||Oa(e)&&Qe(e)==fo},pe.isBuffer=ka,pe.isDate=Ea,pe.isElement=function(e){return Oa(e)&&1===e.nodeType&&!za(e)},pe.isEmpty=function(e){if(null==e)return!0;if(Aa(e)&&(ba(e)||"string"==typeof e||"function"==typeof e.splice||ka(e)||Wa(e)||_a(e)))return!e.length;var t=Fn(e);if(t==vo||t==Ao)return!e.size;if(Zn(e))return!lt(e).length;for(var n in e)if(E.call(e,n))return!1;return!0},pe.isEqual=function(e,t){return ot(e,t)},pe.isEqualWith=function(e,t,n){var r=(n="function"==typeof n?n:to)?n(e,t):to;return r===to?ot(e,t,to,n):!!r},pe.isError=Sa,pe.isFinite=function(e){return"number"==typeof e&&F(e)},pe.isFunction=Ma,pe.isInteger=Ta,pe.isLength=Ca,pe.isMap=ja,pe.isMatch=function(e,t){return e===t||st(e,t,Wn(t))},pe.isMatchWith=function(e,t,n){return n="function"==typeof n?n:to,st(e,t,Wn(t),n)},pe.isNaN=function(e){return Na(e)&&e!=+e},pe.isNative=function(e){if(Xn(e))throw new a("Unsupported core-js use. Try https://npms.io/search?q=ponyfill.");return ut(e)},pe.isNil=function(e){return null==e},pe.isNull=function(e){return null===e},pe.isNumber=Na,pe.isObject=Da,pe.isObjectLike=Oa,pe.isPlainObject=za,pe.isRegExp=Pa,pe.isSafeInteger=function(e){return Ta(e)&&-io<=e&&e<=io},pe.isSet=La,pe.isString=Ra,pe.isSymbol=Ya,pe.isTypedArray=Wa,pe.isUndefined=function(e){return e===to},pe.isWeakMap=function(e){return Oa(e)&&Fn(e)==Eo},pe.isWeakSet=function(e){return Oa(e)&&"[object WeakSet]"==Qe(e)},pe.join=function(e,t){return null==e?"":B.call(e,t)},pe.kebabCase=bi,pe.last=Sr,pe.lastIndexOf=function(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var a=r;return n!==to&&(a=(a=Ba(n))<0?U(r+a,0):$(a,r-1)),t==t?function(e,t,n){for(var r=n+1;r--;)if(e[r]===t)return r;return r}(e,t,a):Vs(e,Xs,a,!0)},pe.lowerCase=wi,pe.lowerFirst=Ai,pe.lt=qa,pe.lte=Ia,pe.max=function(e){return e&&e.length?Fe(e,Ni,et):to},pe.maxBy=function(e,t){return e&&e.length?Fe(e,Rn(t,2),et):to},pe.mean=function(e){return Zs(e,Ni)},pe.meanBy=function(e,t){return Zs(e,Rn(t,2))},pe.min=function(e){return e&&e.length?Fe(e,Ni,ht):to},pe.minBy=function(e,t){return e&&e.length?Fe(e,Rn(t,2),ht):to},pe.stubArray=Gi,pe.stubFalse=Ui,pe.stubObject=function(){return{}},pe.stubString=function(){return""},pe.stubTrue=function(){return!0},pe.multiply=Zi,pe.nth=function(e,t){return e&&e.length?vt(e,Ba(t)):to},pe.noConflict=function(){return Ss._===this&&(Ss._=y),this},pe.noop=Yi,pe.now=na,pe.pad=function(e,t,n){e=Va(e);var r=(t=Ba(t))?gu(e):0;if(!t||t<=r)return e;var a=(t-r)/2;return _n(q(a),n)+e+_n(W(a),n)},pe.padEnd=function(e,t,n){e=Va(e);var r=(t=Ba(t))?gu(e):0;return t&&r<t?e+_n(t-r,n):e},pe.padStart=function(e,t,n){e=Va(e);var r=(t=Ba(t))?gu(e):0;return t&&r<t?_n(t-r,n)+e:e},pe.parseInt=function(e,t,n){return n||null==t?t=0:t&&(t=+t),J(Va(e).replace(Qo,""),t||0)},pe.random=function(e,t,n){if(n&&"boolean"!=typeof n&&Vn(e,t,n)&&(t=n=to),n===to&&("boolean"==typeof t?(n=t,t=to):"boolean"==typeof e&&(n=e,e=to)),e===to&&t===to?(e=0,t=1):(e=Fa(e),t===to?(t=e,e=0):t=Fa(t)),t<e){var r=e;e=t,t=r}if(n||e%1||t%1){var a=K();return $(e+a*(t-e+ks("1e-"+((a+"").length-1))),t)}return At(e,t)},pe.reduce=function(e,t,n){var r=ba(e)?Bs:eu,a=arguments.length<3;return r(e,Rn(t,4),n,a,qe)},pe.reduceRight=function(e,t,n){var r=ba(e)?Gs:eu,a=arguments.length<3;return r(e,Rn(t,4),n,a,Ie)},pe.repeat=function(e,t,n){return t=(n?Vn(e,t,n):t===to)?1:Ba(t),xt(Va(e),t)},pe.replace=function(){var e=arguments,t=Va(e[0]);return e.length<3?t:t.replace(e[1],e[2])},pe.result=function(e,t,n){var r=-1,a=(t=$t(t,e)).length;for(a||(a=1,e=to);++r<a;){var i=null==e?to:e[dr(t[r])];i===to&&(r=a,i=n),e=Ma(i)?i.call(e):i}return e},pe.round=Qi,pe.runInContext=e,pe.sample=function(e){return(ba(e)?Ee:Et)(e)},pe.size=function(e){if(null==e)return 0;if(Aa(e))return Ra(e)?gu(e):e.length;var t=Fn(e);return t==vo||t==Ao?e.size:lt(e).length},pe.snakeCase=xi,pe.some=function(e,t,n){var r=ba(e)?Us:jt;return n&&Vn(e,t,n)&&(t=to),r(e,Rn(t,3))},pe.sortedIndex=function(e,t){return Nt(e,t)},pe.sortedIndexBy=function(e,t,n){return zt(e,t,Rn(n,2))},pe.sortedIndexOf=function(e,t){var n=null==e?0:e.length;if(n){var r=Nt(e,t);if(r<n&&ga(e[r],t))return r}return-1},pe.sortedLastIndex=function(e,t){return Nt(e,t,!0)},pe.sortedLastIndexBy=function(e,t,n){return zt(e,t,Rn(n,2),!0)},pe.sortedLastIndexOf=function(e,t){if(null!=e&&e.length){var n=Nt(e,t,!0)-1;if(ga(e[n],t))return n}return-1},pe.startCase=ki,pe.startsWith=function(e,t,n){return e=Va(e),n=null==n?0:Pe(Ba(n),0,e.length),t=Rt(t),e.slice(n,n+t.length)==t},pe.subtract=eo,pe.sum=function(e){return e&&e.length?tu(e,Ni):0},pe.sumBy=function(e,t){return e&&e.length?tu(e,Rn(t,2)):0},pe.template=function(o,e,t){var n=pe.templateSettings;t&&Vn(o,e,t)&&(e=to),o=Va(o),e=Xa({},e,n,Mn);var s,u,r=Xa({},e.imports,n.imports,Mn),a=si(r),i=au(r,a),c=0,l=e.interpolate||ps,f="__p += '",h=v((e.escape||ps).source+"|"+l.source+"|"+(l===Uo?os:ps).source+"|"+(e.evaluate||ps).source+"|$","g"),d="//# sourceURL="+(E.call(e,"sourceURL")?(e.sourceURL+"").replace(/[\r\n]/g," "):"lodash.templateSources["+ ++ws+"]")+"\n";o.replace(h,function(e,t,n,r,a,i){return n||(n=r),f+=o.slice(c,i).replace(ms,lu),t&&(s=!0,f+="' +\n__e("+t+") +\n'"),a&&(u=!0,f+="';\n"+a+";\n__p += '"),n&&(f+="' +\n((__t = ("+n+")) == null ? '' : __t) +\n'"),c=i+e.length,e}),f+="';\n";var p=E.call(e,"variable")&&e.variable;p||(f="with (obj) {\n"+f+"\n}\n"),f=(u?f.replace(Ro,""):f).replace(Yo,"$1").replace(Wo,"$1;"),f="function("+(p||"obj")+") {\n"+(p?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(s?", __e = _.escape":"")+(u?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+f+"return __p\n}";var m=Ti(function(){return g(a,d+"return "+f).apply(to,i)});if(m.source=f,Sa(m))throw m;return m},pe.times=function(e,t){if((e=Ba(e))<1||io<e)return[];var n=so,r=$(e,so);t=Rn(t),e-=so;for(var a=nu(r,t);++n<e;)t(n);return a},pe.toFinite=Fa,pe.toInteger=Ba,pe.toLength=Ga,pe.toLower=function(e){return Va(e).toLowerCase()},pe.toNumber=Ua,pe.toSafeInteger=function(e){return e?Pe(Ba(e),-io,io):0===e?e:0},pe.toString=Va,pe.toUpper=function(e){return Va(e).toUpperCase()},pe.trim=function(e,t,n){if((e=Va(e))&&(n||t===to))return e.replace(Zo,"");if(!e||!(t=Rt(t)))return e;var r=vu(e),a=vu(t);return Jt(r,ou(r,a),su(r,a)+1).join("")},pe.trimEnd=function(e,t,n){if((e=Va(e))&&(n||t===to))return e.replace(es,"");if(!e||!(t=Rt(t)))return e;var r=vu(e);return Jt(r,0,su(r,vu(t))+1).join("")},pe.trimStart=function(e,t,n){if((e=Va(e))&&(n||t===to))return e.replace(Qo,"");if(!e||!(t=Rt(t)))return e;var r=vu(e);return Jt(r,ou(r,vu(t))).join("")},pe.truncate=function(e,t){var n=30,r="...";if(Da(t)){var a="separator"in t?t.separator:a;n="length"in t?Ba(t.length):n,r="omission"in t?Rt(t.omission):r}var i=(e=Va(e)).length;if(fu(e)){var o=vu(e);i=o.length}if(i<=n)return e;var s=n-gu(r);if(s<1)return r;var u=o?Jt(o,0,s).join(""):e.slice(0,s);if(a===to)return u+r;if(o&&(s+=u.length-s),Pa(a)){if(e.slice(s).search(a)){var c,l=u;for(a.global||(a=v(a.source,Va(ss.exec(a))+"g")),a.lastIndex=0;c=a.exec(l);)var f=c.index;u=u.slice(0,f===to?s:f)}}else if(e.indexOf(Rt(a),s)!=s){var h=u.lastIndexOf(a);-1<h&&(u=u.slice(0,h))}return u+r},pe.unescape=function(e){return(e=Va(e))&&Ho.test(e)?e.replace(qo,yu):e},pe.uniqueId=function(e){var t=++h;return Va(e)+t},pe.upperCase=Ei,pe.upperFirst=Si,pe.each=Vr,pe.eachRight=Jr,pe.first=Ar,Ri(pe,(Xi={},Ve(pe,function(e,t){E.call(pe.prototype,t)||(Xi[t]=e)}),Xi),{chain:!1}),pe.VERSION="4.17.15",Ls(["bind","bindKey","curry","curryRight","partial","partialRight"],function(e){pe[e].placeholder=pe}),Ls(["drop","take"],function(n,r){ye.prototype[n]=function(e){e=e===to?1:U(Ba(e),0);var t=this.__filtered__&&!r?new ye(this):this.clone();return t.__filtered__?t.__takeCount__=$(e,t.__takeCount__):t.__views__.push({size:$(e,so),type:n+(t.__dir__<0?"Right":"")}),t},ye.prototype[n+"Right"]=function(e){return this.reverse()[n](e).reverse()}}),Ls(["filter","map","takeWhile"],function(e,t){var n=t+1,r=1==n||3==n;ye.prototype[e]=function(e){var t=this.clone();return t.__iteratees__.push({iteratee:Rn(e,3),type:n}),t.__filtered__=t.__filtered__||r,t}}),Ls(["head","last"],function(e,t){var n="take"+(t?"Right":"");ye.prototype[e]=function(){return this[n](1).value()[0]}}),Ls(["initial","tail"],function(e,t){var n="drop"+(t?"":"Right");ye.prototype[e]=function(){return this.__filtered__?new ye(this):this[n](1)}}),ye.prototype.compact=function(){return this.filter(Ni)},ye.prototype.find=function(e){return this.filter(e).head()},ye.prototype.findLast=function(e){return this.reverse().find(e)},ye.prototype.invokeMap=kt(function(t,n){return"function"==typeof t?new ye(this):this.map(function(e){return at(e,t,n)})}),ye.prototype.reject=function(e){return this.filter(fa(Rn(e)))},ye.prototype.slice=function(e,t){e=Ba(e);var n=this;return n.__filtered__&&(0<e||t<0)?new ye(n):(e<0?n=n.takeRight(-e):e&&(n=n.drop(e)),t!==to&&(n=(t=Ba(t))<0?n.dropRight(-t):n.take(t-e)),n)},ye.prototype.takeRightWhile=function(e){return this.reverse().takeWhile(e).reverse()},ye.prototype.toArray=function(){return this.take(so)},Ve(ye.prototype,function(f,e){var h=/^(?:filter|find|map|reject)|While$/.test(e),d=/^(?:head|last)$/.test(e),p=pe[d?"take"+("last"==e?"Right":""):e],m=d||/^find/.test(e);p&&(pe.prototype[e]=function(){var e=this.__wrapped__,n=d?[1]:arguments,t=e instanceof ye,r=n[0],a=t||ba(e),i=function(e){var t=p.apply(pe,Fs([e],n));return d&&o?t[0]:t};a&&h&&"function"==typeof r&&1!=r.length&&(t=a=!1);var o=this.__chain__,s=!!this.__actions__.length,u=m&&!o,c=t&&!s;if(m||!a)return u&&c?f.apply(this,n):(l=this.thru(i),u?d?l.value()[0]:l.value():l);e=c?e:new ye(this);var l=f.apply(e,n);return l.__actions__.push({func:Fr,args:[i],thisArg:to}),new ve(l,o)})}),Ls(["pop","push","shift","sort","splice","unshift"],function(e){var n=o[e],r=/^(?:push|sort|unshift)$/.test(e)?"tap":"thru",a=/^(?:pop|shift)$/.test(e);pe.prototype[e]=function(){var t=arguments;if(!a||this.__chain__)return this[r](function(e){return n.apply(ba(e)?e:[],t)});var e=this.value();return n.apply(ba(e)?e:[],t)}}),Ve(ye.prototype,function(e,t){var n=pe[t];if(n){var r=n.name+"";E.call(ie,r)||(ie[r]=[]),ie[r].push({name:t,func:n})}}),ie[mn(to,2).name]=[{name:"wrapper",func:to}],ye.prototype.clone=function(){var e=new ye(this.__wrapped__);return e.__actions__=rn(this.__actions__),e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=rn(this.__iteratees__),e.__takeCount__=this.__takeCount__,e.__views__=rn(this.__views__),e},ye.prototype.reverse=function(){if(this.__filtered__){var e=new ye(this);e.__dir__=-1,e.__filtered__=!0}else(e=this.clone()).__dir__*=-1;return e},ye.prototype.value=function(){var e=this.__wrapped__.value(),t=this.__dir__,n=ba(e),r=t<0,a=n?e.length:0,i=function(e,t,n){for(var r=-1,a=n.length;++r<a;){var i=n[r],o=i.size;switch(i.type){case"drop":e+=o;break;case"dropRight":t-=o;break;case"take":t=$(t,e+o);break;case"takeRight":e=U(e,t-o)}}return{start:e,end:t}}(0,a,this.__views__),o=i.start,s=i.end,u=s-o,c=r?s:o-1,l=this.__iteratees__,f=l.length,h=0,d=$(u,this.__takeCount__);if(!n||!r&&a==u&&d==u)return Ht(e,this.__actions__);var p=[];e:for(;u--&&h<d;){for(var m=-1,g=e[c+=t];++m<f;){var v=l[m],y=v.iteratee,_=v.type,b=y(g);if(2==_)g=b;else if(!b){if(1==_)continue e;break e}}p[h++]=g}return p},pe.prototype.at=Br,pe.prototype.chain=function(){return Hr(this)},pe.prototype.commit=function(){return new ve(this.value(),this.__chain__)},pe.prototype.next=function(){this.__values__===to&&(this.__values__=Ha(this.value()));var e=this.__index__>=this.__values__.length;return{done:e,value:e?to:this.__values__[this.__index__++]}},pe.prototype.plant=function(e){for(var t,n=this;n instanceof ge;){var r=mr(n);r.__index__=0,r.__values__=to,t?a.__wrapped__=r:t=r;var a=r;n=n.__wrapped__}return a.__wrapped__=e,t},pe.prototype.reverse=function(){var e=this.__wrapped__;if(e instanceof ye){var t=e;return this.__actions__.length&&(t=new ye(this)),(t=t.reverse()).__actions__.push({func:Fr,args:[Dr],thisArg:to}),new ve(t,this.__chain__)}return this.thru(Dr)},pe.prototype.toJSON=pe.prototype.valueOf=pe.prototype.value=function(){return Ht(this.__wrapped__,this.__actions__)},pe.prototype.first=pe.prototype.head,N&&(pe.prototype[N]=function(){return this}),pe}();z?((z.exports=_u)._=_u,N._=_u):Ss._=_u}).call(this)});function Gu(e){return e.reduce(function(e,t,n,r){return e+t})}function Uu(e){if(Bu.isArray(e))return e;if("string"==typeof e)return e.split("");throw Error("Parameter must be a string or array.")}var $u={jarowinkler:function(e,t,n){var r,a;e=Uu(e),t=Uu(t),a=e.length>t.length?(r=e,t):(r=t,e);var i,o,s,u,c=n||.7,l=Math.floor(Math.max(r.length/2-1,0)),f=[],h=[],d=0;for(i=0;i<a.length;i++)for(u=a[i],o=Math.max(i-l,0),s=Math.min(i+l+1,r.length);o<s;o++)if(!h[o]&&u===r[o]){h[f[i]=o]=!0,d++;break}var p,m,g=[],v=[],y=0,_=0;for(m=p=0;p<a.length;p++)-1<f[p]&&(g[m]=a[p],m++);for(m=p=0;p<r.length;p++)h[p]&&(v[m]=r[p],m++);for(i=0;i<g.length;i++)g[i]!==v[i]&&y++;for(i=0;i<a.length&&e[i]===t[i];i++)_++;var b=d;n=y/2;if(b){var w=(b/e.length+b/t.length+(b-n)/b)/3;return w<c?w:w+Math.min(.1,1/r.length)*_*(1-w)}return 0},levenshtein:function(e,t,n){if(e=Uu(e),t=Uu(t),0===e.length)return t.length;if(0===t.length)return e.length;var r,a,i,o,s=n||{d:1,i:1,s:1},u=[],c=[],l=t.length+1;for(r=0;r<l;r++)u[r]=r;for(r=0;r<e.length;r++){for(c[0]=r+1,a=0;a<t.length;a++)i=e[r]===t[a]?0:s.s,c[a+1]=Math.min(c[a]+s.d,u[a+1]+s.i,u[a]+i);for(a=0;a<l;a++)u[a]=c[a]}return((o=Math.max(e.length,t.length))-c[t.length])/o},ngram:function(e,t,n){e=Uu(e),t=Uu(t);var r,a,i,o,s,u,c,l=e.length,f=t.length,h=n||2,d=[],p=[],m=[],g=[],v=[];if(0===l||0===f)return l===f?1:0;if(r=0,l<h||f<h){for(a=0,o=Math.min(l,f);a<o;a++)e[a]===t[a]&&r++;return r/Math.max(l,f)}for(a=0;a<l+h-1;a++)d[a]=a<h-1?0:e[a-h+1];for(a=0;a<=l;a++)p[a]=a;for(i=1;i<=f;i++){if(i<h){for(s=0;s<h-i;s++)v[s]=0;for(s=h-i;s<h;s++)v[s]=t[s-(h-i)]}else v=t.slice(i-h,i);for(m[0]=i,a=1;a<=l;a++){for(u=h,o=r=0;o<h;o++)d[a-1+o]!==v[o]?r++:0===d[a-1+o]&&u--;c=r/u,m[a]=Math.min(Math.min(m[a-1]+1,p[a]+1),p[a-1]+c)}g=p,p=m,m=g}return 1-p[l]/Math.max(l,f)},pearson:function(t,n){var r=[];Object.keys(t).forEach(function(e){n[e]&&r.push(e)});var e=r.length;if(0===e)return 0;var a=Gu(r.map(function(e){return t[e]})),i=Gu(r.map(function(e){return n[e]})),o=Gu(r.map(function(e){return Math.pow(t[e],2)})),s=Gu(r.map(function(e){return Math.pow(n[e],2)})),u=Gu(r.map(function(e){return t[e]*n[e]}))-a*i/e,c=Math.sqrt((o-Math.pow(a,2)/e)*(s-Math.pow(i,2)/e));return 0===c?0:u/c},jaccard:function(e,t){return e=Uu(e),t=Uu(t),Bu.intersection(e,t).length/Bu.union(e,t).length},tanimoto:function(e,t){e=Uu(e),t=Uu(t);var n=Bu.intersection(e,t).length;return n/(e.length+t.length-n)}};var Vu={author:$s,lead_image_url:Js,dek:function(e,t){var n=t.$,r=t.excerpt;if(1e3<e.length||e.length<5)return null;if(r&&Pa(r,10)===Pa(e,10))return null;var a=es(e,n);return Ns.test(a)?null:ua(a.trim())},date_published:Iu,content:Hu,title:Fu};function Ju(e,t){var o,a,i,s;return t.stripUnlikelyCandidates&&((o=e)("*").not("a").each(function(e,t){var n=o(t),r=n.attr("class"),a=n.attr("id");if(a||r){var i="".concat(r||""," ").concat(a||"");ki.test(i)||Ai.test(i)&&n.remove()}}),e=o),e=function(a){var e=!(1<arguments.length&&void 0!==arguments[1])||arguments[1];return Wi.forEach(function(e){var t=ja(e,2),n=t[0],r=t[1];a("".concat(n," ").concat(r)).each(function(e,t){ro(a(t).parent(n),a,80)})}),so(a,e),so(a,e),a}(e=Si(e),t.weightNodes),s=0,(a=e)("[score]").each(function(e,t){if(!Yi.test(t.tagName)){var n=a(t),r=Zi(n);s<r&&(s=r,i=n)}}),i?i=uo(i,s,a):a("body")||a("*").first()}var Ku={defaultOpts:{stripUnlikelyCandidates:!0,weightNodes:!0,cleanConditionally:!0},extract:function(e,t){var n=e.$,r=e.html,a=e.title,i=e.url;t=pt({},this.defaultOpts,t),n=n||Cr.load(r);var o=this.getContentNode(n,a,i,t);if(ts(o))return this.cleanAndReturnNode(o,n);var s=!0,u=!1,c=void 0;try{for(var l,f=Ca(si(t).filter(function(e){return!0===t[e]}));!(s=(l=f.next()).done);s=!0){var h=l.value;if(t[h]=!1,n=Cr.load(r),ts(o=this.getContentNode(n,a,i,t)))break}}catch(e){u=!0,c=e}finally{try{s||null==f.return||f.return()}finally{if(u)throw c}}return this.cleanAndReturnNode(o,n)},getContentNode:function(e,t,n,r){return Hu(Ju(e,r),{$:e,cleanConditionally:r.cleanConditionally,title:t,url:n})},cleanAndReturnNode:function(e,t){return e?ua(t.html(e)):null}},Xu=["tweetmeme-title","dc.title","rbtitle","headline","title"],Zu=["og:title"],Qu=[".hentry .entry-title","h1#articleHeader","h1.articleHeader","h1.article",".instapaper_title","#meebo-title"],ec=["article h1","#entry-title",".entry-title","#entryTitle","#entrytitle",".entryTitle",".entrytitle","#articleTitle",".articleTitle","post post-title","h1.title","h2.article","h1","html head title","title"],tc={extract:function(e){var t,n=e.$,r=e.url,a=e.metaCache;return(t=Xo(n,Xu,a))?Fu(t,{url:r,$:n}):(t=Qo(n,Qu))?Fu(t,{url:r,$:n}):(t=Xo(n,Zu,a))?Fu(t,{url:r,$:n}):(t=Qo(n,ec))?Fu(t,{url:r,$:n}):""}},nc=["byl","clmst","dc.author","dcsext.author","dc.creator","rbauthors","authors"],rc=[".entry .entry-author",".author.vcard .fn",".author .vcard .fn",".byline.vcard .fn",".byline .vcard .fn",".byline .by .author",".byline .by",".byline .author",".post-author.vcard",".post-author .vcard","a[rel=author]","#by_author",".by_author","#entryAuthor",".entryAuthor",".byline a[href*=author]","#author .authorname",".author .authorname","#author",".author",".articleauthor",".ArticleAuthor",".byline"],ac=/^[\n\s]*By/i,ic=[["#byline",ac],[".byline",ac]],oc={extract:function(e){var t,n=e.$,r=e.metaCache;if((t=Xo(n,nc,r))&&t.length<300)return $s(t);if((t=Qo(n,rc,2))&&t.length<300)return $s(t);var a=!0,i=!1,o=void 0;try{for(var s,u=Ca(ic);!(a=(s=u.next()).done);a=!0){var c=ja(s.value,2),l=c[0],f=c[1],h=n(l);if(1===h.length){var d=h.text();if(f.test(d))return $s(d)}}}catch(e){i=!0,o=e}finally{try{a||null==u.return||u.return()}finally{if(i)throw o}}return null}},sc=["article:published_time","displaydate","dc.date","dc.date.issued","rbpubdate","publish_date","pub_date","pagedate","pubdate","revision_date","doc_date","date_created","content_create_date","lastmodified","created","date"],uc=[".hentry .dtstamp.published",".hentry .published",".hentry .dtstamp.updated",".hentry .updated",".single .published",".meta .published",".meta .postDate",".entry-date",".byline .date",".postmetadata .date",".article_datetime",".date-header",".story-date",".dateStamp","#story .datetime",".dateline",".pubdate"],cc=[new RegExp("/(20\\d{2}/\\d{2}/\\d{2})/","i"),new RegExp("(20\\d{2}-[01]\\d-[0-3]\\d)","i"),new RegExp("/(20\\d{2}/".concat("(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)","/[0-3]\\d)/"),"i")],lc={extract:function(e){var t,n,r,a=e.$,i=e.url,o=e.metaCache;return(t=Xo(a,sc,o,!1))?Iu(t):(t=Qo(a,uc))?Iu(t):(n=i,(t=(r=cc.find(function(e){return e.test(n)}))?r.exec(n)[1]:null)?Iu(t):null)}},fc=["og:image","twitter:image","image_src"],hc=["link[rel=image_src]"],dc=new RegExp(["upload","wp-content","large","photo","wp-image"].join("|"),"i"),pc=new RegExp(["spacer","sprite","blank","throbber","gradient","tile","bg","background","icon","social","header","hdr","advert","spinner","loader","loading","default","rating","share","facebook","twitter","theme","promo","ads","wp-includes"].join("|"),"i"),mc=/\.gif(\?.*)?$/i,gc=/\.jpe?g(\?.*)?$/i;function vc(e){return"".concat(e.attr("class")||""," ").concat(e.attr("id")||"")}var yc={extract:function(e){var t,c=e.$,n=e.content,r=e.metaCache,a=e.html;c.browser||0!==c("head").length||c("*").first().prepend(a);var i=Xo(c,fc,r,!1);if(i&&(t=Js(i)))return t;var o=c(n),l=c("img",o).toArray(),f={};l.forEach(function(e,t){var n=c(e),r=n.attr("src");if(r){var a,i,o,s,u=function(e){e=e.trim();var t=0;return dc.test(e)&&(t+=20),pc.test(e)&&(t-=20),mc.test(e)&&(t-=10),gc.test(e)&&(t+=10),t}(r);u+=n.attr("alt")?5:0,u+=function(e){var t=0;1===e.parents("figure").first().length&&(t+=25);var n,r=e.parent();return 1===r.length&&(n=r.parent()),[r,n].forEach(function(e){qi.test(vc(e))&&(t+=15)}),t}(n),u+=(a=0,i=n.next(),(o=i.get(0))&&"figcaption"===o.tagName.toLowerCase()&&(a+=25),qi.test(vc(i))&&(a+=15),a),u+=function(e){var t=0,n=Xi(e.attr("width")),r=Xi(e.attr("height")),a=e.attr("src");if(n&&n<=50&&(t-=50),r&&r<=50&&(t-=50),n&&r&&!a.includes("sprite")){var i=n*r;i<5e3?t-=100:t+=Math.round(i/1e3)}return t}(n),u+=(s=t,l.length/2-s),f[r]=u}});var s=si(f).reduce(function(e,t){return f[t]>e[1]?[t,f[t]]:e},[null,0]),u=ja(s,2),h=u[0];if(0<u[1]&&(t=Js(h)))return t;var d=!0,p=!1,m=void 0;try{for(var g,v=Ca(hc);!(d=(g=v.next()).done);d=!0){var y=g.value,_=c(y).first(),b=_.attr("src");if(b&&(t=Js(b)))return t;var w=_.attr("href");if(w&&(t=Js(w)))return t;var A=_.attr("value");if(A&&(t=Js(A)))return t}}catch(e){p=!0,m=e}finally{try{d||null==v.return||v.return()}finally{if(p)throw m}}return null}},_c=e(function(t,e){(function(){var e,h,u,d,p,n,c,r,m,g,a,i,o,l,f;u=Math.floor,g=Math.min,h=function(e,t){return e<t?-1:t<e?1:0},m=function(e,t,n,r,a){var i;if(null==n&&(n=0),null==a&&(a=h),n<0)throw new Error("lo must be non-negative");for(null==r&&(r=e.length);n<r;)a(t,e[i=u((n+r)/2)])<0?r=i:n=i+1;return[].splice.apply(e,[n,n-n].concat(t)),t},n=function(e,t,n){return null==n&&(n=h),e.push(t),l(e,0,e.length-1,n)},p=function(e,t){var n,r;return null==t&&(t=h),n=e.pop(),e.length?(r=e[0],e[0]=n,f(e,0,t)):r=n,r},r=function(e,t,n){var r;return null==n&&(n=h),r=e[0],e[0]=t,f(e,0,n),r},c=function(e,t,n){var r;return null==n&&(n=h),e.length&&n(e[0],t)<0&&(t=(r=[e[0],t])[0],e[0]=r[1],f(e,0,n)),t},d=function(n,e){var t,r,a,i,o,s;for(null==e&&(e=h),o=[],r=0,a=(i=function(){s=[];for(var e=0,t=u(n.length/2);0<=t?e<t:t<e;0<=t?e++:e--)s.push(e);return s}.apply(this).reverse()).length;r<a;r++)t=i[r],o.push(f(n,t,e));return o},o=function(e,t,n){var r;if(null==n&&(n=h),-1!==(r=e.indexOf(t)))return l(e,0,r,n),f(e,r,n)},a=function(e,t,n){var r,a,i,o,s;if(null==n&&(n=h),!(a=e.slice(0,t)).length)return a;for(d(a,n),i=0,o=(s=e.slice(t)).length;i<o;i++)r=s[i],c(a,r,n);return a.sort(n).reverse()},i=function(e,t,n){var r,a,i,o,s,u,c,l,f;if(null==n&&(n=h),10*t<=e.length){if(!(i=e.slice(0,t).sort(n)).length)return i;for(a=i[i.length-1],o=0,u=(c=e.slice(t)).length;o<u;o++)n(r=c[o],a)<0&&(m(i,r,0,null,n),i.pop(),a=i[i.length-1]);return i}for(d(e,n),f=[],s=0,l=g(t,e.length);0<=l?s<l:l<s;0<=l?++s:--s)f.push(p(e,n));return f},l=function(e,t,n,r){var a,i,o;for(null==r&&(r=h),a=e[n];t<n&&r(a,i=e[o=n-1>>1])<0;)e[n]=i,n=o;return e[n]=a},f=function(e,t,n){var r,a,i,o,s;for(null==n&&(n=h),a=e.length,i=e[s=t],r=2*t+1;r<a;)(o=r+1)<a&&!(n(e[r],e[o])<0)&&(r=o),e[t]=e[r],r=2*(t=r)+1;return e[t]=i,l(e,s,t,n)},e=function(){function t(e){this.cmp=null!=e?e:h,this.nodes=[]}return t.push=n,t.pop=p,t.replace=r,t.pushpop=c,t.heapify=d,t.updateItem=o,t.nlargest=a,t.nsmallest=i,t.prototype.push=function(e){return n(this.nodes,e,this.cmp)},t.prototype.pop=function(){return p(this.nodes,this.cmp)},t.prototype.peek=function(){return this.nodes[0]},t.prototype.contains=function(e){return-1!==this.nodes.indexOf(e)},t.prototype.replace=function(e){return r(this.nodes,e,this.cmp)},t.prototype.pushpop=function(e){return c(this.nodes,e,this.cmp)},t.prototype.heapify=function(){return d(this.nodes,this.cmp)},t.prototype.updateItem=function(e){return o(this.nodes,e,this.cmp)},t.prototype.clear=function(){return this.nodes=[]},t.prototype.empty=function(){return 0===this.nodes.length},t.prototype.size=function(){return this.nodes.length},t.prototype.clone=function(){var e;return(e=new t).nodes=this.nodes.slice(0),e},t.prototype.toArray=function(){return this.nodes.slice(0)},t.prototype.insert=t.prototype.push,t.prototype.top=t.prototype.peek,t.prototype.front=t.prototype.peek,t.prototype.has=t.prototype.contains,t.prototype.copy=t.prototype.clone,t}(),t.exports=e}).call(this)}),bc=e(function(e,l){(function(){var a,d,i,e,ee,t,p,n,g,v,r,o,s,I,S,f,u,H,q,E,c=[].indexOf||function(e){for(var t=0,n=this.length;t<n;t++)if(t in this&&this[t]===e)return t;return-1};p=Math.floor,g=Math.max,v=Math.min,d=_c,f=function(e,t){return t?2*e/t:1},S=function(e,t){var n,r,a,i,o,s;for(o=[e.length,t.length],n=i=0,s=v(r=o[0],a=o[1]);0<=s?i<s:s<i;n=0<=s?++i:--i){if(e[n]<t[n])return-1;if(e[n]>t[n])return 1}return r-a},E=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},I=function(e){var t,n;for(t=0,n=e.length;t<n;t++)if(e[t])return!0;return!1},ee=function(){function e(e,t,n,r){this.isjunk=e,null==t&&(t=""),null==n&&(n=""),this.autojunk=null==r||r,this.a=this.b=null,this.setSeqs(t,n)}return e.prototype.setSeqs=function(e,t){return this.setSeq1(e),this.setSeq2(t)},e.prototype.setSeq1=function(e){if(e!==this.a)return this.a=e,this.matchingBlocks=this.opcodes=null},e.prototype.setSeq2=function(e){if(e!==this.b)return this.b=e,this.matchingBlocks=this.opcodes=null,this.fullbcount=null,this._chainB()},e.prototype._chainB=function(){var e,t,n,r,a,i,o,s,u,c,l,f,h,d;for(e=this.b,this.b2j=t={},r=c=0,f=e.length;c<f;r=++c)n=e[r],(E(t,n)?t[n]:t[n]=[]).push(r);if(i={},a=this.isjunk)for(l=0,h=(d=Object.keys(t)).length;l<h;l++)a(n=d[l])&&(i[n]=!0,delete t[n]);if(u={},o=e.length,this.autojunk&&200<=o)for(n in s=p(o/100)+1,t)t[n].length>s&&(u[n]=!0,delete t[n]);return this.isbjunk=function(e){return E(i,e)},this.isbpopular=function(e){return E(u,e)}},e.prototype.findLongestMatch=function(e,t,n,r){var a,i,o,s,u,c,l,f,h,d,p,m,g,v,y,_,b,w,A,x,k;for(a=(_=[this.a,this.b,this.b2j,this.isbjunk])[0],i=_[1],o=_[2],f=_[3],s=(b=[e,n,0])[0],u=b[1],c=b[2],d={},l=g=e;e<=t?g<t:t<g;l=e<=t?++g:--g){for(m={},v=0,y=(w=E(o,a[l])?o[a[l]]:[]).length;v<y;v++)if(!((h=w[v])<n)){if(r<=h)break;c<(p=m[h]=(d[h-1]||0)+1)&&(s=(A=[l-p+1,h-p+1,p])[0],u=A[1],c=A[2])}d=m}for(;e<s&&n<u&&!f(i[u-1])&&a[s-1]===i[u-1];)s=(x=[s-1,u-1,c+1])[0],u=x[1],c=x[2];for(;s+c<t&&u+c<r&&!f(i[u+c])&&a[s+c]===i[u+c];)c++;for(;e<s&&n<u&&f(i[u-1])&&a[s-1]===i[u-1];)s=(k=[s-1,u-1,c+1])[0],u=k[1],c=k[2];for(;s+c<t&&u+c<r&&f(i[u+c])&&a[s+c]===i[u+c];)c++;return[s,u,c]},e.prototype.getMatchingBlocks=function(){var e,t,n,r,a,i,o,s,u,c,l,f,h,d,p,m,g,v,y,_,b,w,A,x,k,E;if(this.matchingBlocks)return this.matchingBlocks;for(v=[[0,d=(w=[this.a.length,this.b.length])[0],0,p=w[1]]],m=[];v.length;)t=(A=v.pop())[0],e=A[1],r=A[2],n=A[3],a=(x=y=this.findLongestMatch(t,e,r,n))[0],s=x[1],(l=x[2])&&(m.push(y),t<a&&r<s&&v.push([t,a,r,s]),a+l<e&&s+l<n&&v.push([a+l,e,s+l,n]));for(m.sort(S),i=u=f=0,g=[],_=0,b=m.length;_<b;_++)o=(k=m[_])[0],c=k[1],h=k[2],i+f===o&&u+f===c?f+=h:(f&&g.push([i,u,f]),i=(E=[o,c,h])[0],u=E[1],f=E[2]);return f&&g.push([i,u,f]),g.push([d,p,0]),this.matchingBlocks=g},e.prototype.getOpcodes=function(){var e,t,n,r,a,i,o,s,u,c,l,f;if(this.opcodes)return this.opcodes;for(r=a=0,this.opcodes=t=[],s=0,u=(c=this.getMatchingBlocks()).length;s<u;s++)e=(l=c[s])[0],n=l[1],i=l[2],o="",r<e&&a<n?o="replace":r<e?o="delete":a<n&&(o="insert"),o&&t.push([o,r,e,a,n]),r=(f=[e+i,n+i])[0],a=f[1],i&&t.push(["equal",e,r,n,a]);return t},e.prototype.getGroupedOpcodes=function(e){var t,n,r,a,i,o,s,u,c,l,f,h,d,p,m;for(null==e&&(e=3),(t=this.getOpcodes()).length||(t=[["equal",0,1,0,1]]),"equal"===t[0][0]&&(c=(h=t[0])[0],a=h[1],i=h[2],o=h[3],s=h[4],t[0]=[c,g(a,i-e),i,g(o,s-e),s]),"equal"===t[t.length-1][0]&&(c=(d=t[t.length-1])[0],a=d[1],i=d[2],o=d[3],s=d[4],t[t.length-1]=[c,a,v(i,a+e),o,v(s,o+e)]),u=e+e,r=[],n=[],l=0,f=t.length;l<f;l++)c=(p=t[l])[0],a=p[1],i=p[2],o=p[3],s=p[4],"equal"===c&&u<i-a&&(n.push([c,a,v(i,a+e),o,v(s,o+e)]),r.push(n),n=[],a=(m=[g(a,i-e),g(o,s-e)])[0],o=m[1]),n.push([c,a,i,o,s]);return!n.length||1===n.length&&"equal"===n[0][0]||r.push(n),r},e.prototype.ratio=function(){var e,t,n,r;for(t=e=0,n=(r=this.getMatchingBlocks()).length;t<n;t++)e+=r[t][2];return f(e,this.a.length+this.b.length)},e.prototype.quickRatio=function(){var e,t,n,r,a,i,o,s,u,c,l;if(!this.fullbcount)for(this.fullbcount=n={},i=0,s=(c=this.b).length;i<s;i++)n[t=c[i]]=(n[t]||0)+1;for(n=this.fullbcount,e={},o=r=0,u=(l=this.a).length;o<u;o++)t=l[o],a=E(e,t)?e[t]:n[t]||0,e[t]=a-1,0<a&&r++;return f(r,this.a.length+this.b.length)},e.prototype.realQuickRatio=function(){var e,t,n;return n=[this.a.length,this.b.length],f(v(e=n[0],t=n[1]),e+t)},e}(),n=function(e,t,n,r){var a,i,o,s,u,c,l,f,h;if(null==n&&(n=3),null==r&&(r=.6),!(0<n))throw new Error("n must be > 0: ("+n+")");if(!(0<=r&&r<=1))throw new Error("cutoff must be in [0.0, 1.0]: ("+r+")");for(a=[],(i=new ee).setSeq2(e),s=0,c=t.length;s<c;s++)o=t[s],i.setSeq1(o),i.realQuickRatio()>=r&&i.quickRatio()>=r&&i.ratio()>=r&&a.push([i.ratio(),o]);for(h=[],u=0,l=(a=d.nlargest(a,n,S)).length;u<l;u++)(f=a[u])[0],o=f[1],h.push(o);return h},u=function(e,t){var n,r,a;for(n=(a=[0,e.length])[0],r=a[1];n<r&&e[n]===t;)n++;return n},a=function(){function e(e,t){this.linejunk=e,this.charjunk=t}return e.prototype.compare=function(e,t){var n,r,a,i,o,s,u,c,l,f,h,d,p,m;for(u=[],l=0,h=(p=new ee(this.linejunk,e,t).getOpcodes()).length;l<h;l++){switch(c=(m=p[l])[0],r=m[1],n=m[2],i=m[3],a=m[4],c){case"replace":o=this._fancyReplace(e,r,n,t,i,a);break;case"delete":o=this._dump("-",e,r,n);break;case"insert":o=this._dump("+",t,i,a);break;case"equal":o=this._dump(" ",e,r,n);break;default:throw new Error("unknow tag ("+c+")")}for(f=0,d=o.length;f<d;f++)s=o[f],u.push(s)}return u},e.prototype._dump=function(e,t,n,r){var a,i,o;for(o=[],a=i=n;n<=r?i<r:r<i;a=n<=r?++i:--i)o.push(e+" "+t[a]);return o},e.prototype._plainReplace=function(e,t,n,r,a,i){var o,s,u,c,l,f,h,d,p,m;for(l=i-a<n-t?(o=this._dump("+",r,a,i),this._dump("-",e,t,n)):(o=this._dump("-",e,t,n),this._dump("+",r,a,i)),c=[],f=0,d=(m=[o,l]).length;f<d;f++)for(h=0,p=(s=m[f]).length;h<p;h++)u=s[h],c.push(u);return c},e.prototype._fancyReplace=function(e,t,n,r,a,i){var o,s,u,c,l,f,h,d,p,m,g,v,y,_,b,w,A,x,k,E,S,M,T,C,D,O,j,N,z,P,L,R,Y,W,q,I,H,F,B,G,U,$,V,J,K,X,Z,Q;for(h=(I=[.74,.75])[0],_=I[1],y=new ee(this.charjunk),b=(H=[null,null])[0],w=H[1],M=[],x=C=a;a<=i?C<i:i<C;x=a<=i?++C:--C)for(m=r[x],y.setSeq2(m),A=D=t;t<=n?D<n:n<D;A=t<=n?++D:--D)(s=e[A])!==m?(y.setSeq1(s),y.realQuickRatio()>h&&y.quickRatio()>h&&y.ratio()>h&&(h=($=[y.ratio(),A,x])[0],d=$[1],p=$[2])):null===b&&(b=(U=[A,x])[0],w=U[1]);if(h<_){if(null===b){for(O=0,N=(V=this._plainReplace(e,t,n,r,a,i)).length;O<N;O++)S=V[O],M.push(S);return M}d=(J=[b,w,1])[0],p=J[1],h=J[2]}else b=null;for(j=0,z=(K=this._fancyHelper(e,t,d,r,a,p)).length;j<z;j++)S=K[j],M.push(S);if(o=(X=[e[d],r[p]])[0],f=X[1],null===b){for(l=v="",y.setSeqs(o,f),Y=0,P=(Z=y.getOpcodes()).length;Y<P;Y++)switch(T=(Q=Z[Y])[0],u=Q[1],c=Q[2],g=Q[3],k=(F=[c-u,Q[4]-g])[0],E=F[1],T){case"replace":l+=Array(k+1).join("^"),v+=Array(E+1).join("^");break;case"delete":l+=Array(k+1).join("-");break;case"insert":v+=Array(E+1).join("+");break;case"equal":l+=Array(k+1).join(" "),v+=Array(E+1).join(" ");break;default:throw new Error("unknow tag ("+T+")")}for(W=0,L=(B=this._qformat(o,f,l,v)).length;W<L;W++)S=B[W],M.push(S)}else M.push("  "+o);for(q=0,R=(G=this._fancyHelper(e,d+1,n,r,p+1,i)).length;q<R;q++)S=G[q],M.push(S);return M},e.prototype._fancyHelper=function(e,t,n,r,a,i){var o;return o=[],t<n?o=a<i?this._fancyReplace(e,t,n,r,a,i):this._dump("-",e,t,n):a<i&&(o=this._dump("+",r,a,i)),o},e.prototype._qformat=function(e,t,n,r){var a,i;return i=[],a=v(u(e,"\t"),u(t,"\t")),a=v(a,u(n.slice(0,a)," ")),a=v(a,u(r.slice(0,a)," ")),n=n.slice(a).replace(/\s+$/,""),r=r.slice(a).replace(/\s+$/,""),i.push("- "+e),n.length&&i.push("? "+Array(a+1).join("\t")+n+"\n"),i.push("+ "+t),r.length&&i.push("? "+Array(a+1).join("\t")+r+"\n"),i},e}(),e=function(e,t){return null==t&&(t=/^\s*#?\s*$/),t.test(e)},i=function(e,t){return null==t&&(t=" \t"),0<=c.call(t,e)},q=function(e,t){var n,r;return n=e+1,1===(r=t-e)?""+n:(r||n--,n+","+r)},s=function(e,t,n){var r,a,i,o,s,u,c,l,f,h,d,p,m,g,v,y,_,b,w,A,x,k,E,S,M,T,C,D,O,j,N,z,P,L,R,Y,W;for(null==(s=(N=null!=n?n:{}).fromfile)&&(s=""),null==(w=N.tofile)&&(w=""),null==(u=N.fromfiledate)&&(u=""),null==(A=N.tofiledate)&&(A=""),null==N.n&&3,null==(v=N.lineterm)&&(v="\n"),y=!(g=[]),x=0,M=(z=new ee(null,e,t).getGroupedOpcodes()).length;x<M;x++)for(c=z[x],y||(y=!0,o=u?"\t"+u:"",b=A?"\t"+A:"",g.push("--- "+s+o+v),g.push("+++ "+w+b+v)),p=(P=[c[0],c[c.length-1]])[1],r=q((i=P[0])[1],p[2]),a=q(i[3],p[4]),g.push("@@ -"+r+" +"+a+" @@"+v),k=0,T=c.length;k<T;k++)if(_=(L=c[k])[0],l=L[1],f=L[2],h=L[3],d=L[4],"equal"!==_){if("replace"===_||"delete"===_)for(S=0,D=(Y=e.slice(l,f)).length;S<D;S++)m=Y[S],g.push("-"+m);if("replace"===_||"insert"===_)for(j=0,O=(W=t.slice(h,d)).length;j<O;j++)m=W[j],g.push("+"+m)}else for(E=0,C=(R=e.slice(l,f)).length;E<C;E++)m=R[E],g.push(" "+m);return g},H=function(e,t){var n,r;return n=e+1,(r=t-e)||n--,r<=1?""+n:n+","+(n+r-1)},t=function(e,t,n){var r,a,i,o,s,u,c,l,f,h,d,p,m,g,v,y,_,b,w,A,x,k,E,S,M,T,C,D,O,j,N,z,P,L,R,Y,W,q;for(null==(s=(z=null!=n?n:{}).fromfile)&&(s=""),null==(A=z.tofile)&&(A=""),null==(u=z.fromfiledate)&&(u=""),null==(x=z.tofiledate)&&(x=""),null==z.n&&3,null==(v=z.lineterm)&&(v="\n"),_=!(y={insert:"+ ",delete:"- ",replace:"! ",equal:"  "}),g=[],k=0,T=(P=new ee(null,e,t).getGroupedOpcodes()).length;k<T;k++)if(c=P[k],!_){if(_=!0,o=u?"\t"+u:"",w=x?"\t"+x:"",g.push("*** "+s+o+v),g.push("--- "+A+w+v),i=(L=[c[0],c[c.length-1]])[0],p=L[1],g.push("***************"+v),r=H(i[1],p[2]),g.push("*** "+r+" ****"+v),I(function(){var e,t,n,r;for(r=[],e=0,t=c.length;e<t;e++)n=c[e],b=n[0],n[1],n[2],n[3],n[4],r.push("replace"===b||"delete"===b);return r}()))for(E=0,C=c.length;E<C;E++)if(R=c[E],b=R[0],l=R[1],f=R[2],R[3],R[4],"insert"!==b)for(S=0,D=(Y=e.slice(l,f)).length;S<D;S++)m=Y[S],g.push(y[b]+m);if(a=H(i[3],p[4]),g.push("--- "+a+" ----"+v),I(function(){var e,t,n,r;for(r=[],e=0,t=c.length;e<t;e++)n=c[e],b=n[0],n[1],n[2],n[3],n[4],r.push("replace"===b||"insert"===b);return r}()))for(M=0,O=c.length;M<O;M++)if(W=c[M],b=W[0],W[1],W[2],h=W[3],d=W[4],"delete"!==b)for(N=0,j=(q=t.slice(h,d)).length;N<j;N++)m=q[N],g.push(y[b]+m)}return g},r=function(e,t,n,r){return null==r&&(r=i),new a(n,r).compare(e,t)},o=function(e,t){var n,r,a,i,o,s,u;if(!(i={1:"- ",2:"+ "}[t]))throw new Error("unknow delta choice (must be 1 or 2): "+t);for(a=["  ",i],r=[],o=0,s=e.length;o<s;o++)u=(n=e[o]).slice(0,2),0<=c.call(a,u)&&r.push(n.slice(2));return r},l._arrayCmp=S,l.SequenceMatcher=ee,l.getCloseMatches=n,l._countLeading=u,l.Differ=a,l.IS_LINE_JUNK=e,l.IS_CHARACTER_JUNK=i,l._formatRangeUnified=q,l.unifiedDiff=s,l._formatRangeContext=H,l.contextDiff=t,l.ndiff=r,l.restore=o}).call(this)}),wc=(bc._arrayCmp,bc.SequenceMatcher,bc.getCloseMatches,bc._countLeading,bc.Differ,bc.IS_LINE_JUNK,bc.IS_CHARACTER_JUNK,bc._formatRangeUnified,bc.unifiedDiff,bc._formatRangeContext,bc.contextDiff,bc.ndiff,bc.restore,bc);var Ac=/\d/,xc=new RegExp(["print","archive","comment","discuss","e-mail","email","share","reply","all","login","sign","single","adx","entry-unrelated"].join("|"),"i"),kc=new RegExp("(next|weiter|continue|>([^|]|$)|»([^|]|$))","i"),Ec=new RegExp("(first|last|end)","i"),Sc=new RegExp("(prev|earl|old|new|<|«)","i");function Mc(e){var t=e.links,k=e.articleUrl,E=e.baseUrl,S=e.parsedUrl,M=e.$,n=e.previousUrls,T=void 0===n?[]:n;S=S||Mr.parse(k);var C=new RegExp("^".concat(E),"i"),D=0<M(yi).length,r=t.reduce(function(e,t){var n=ns(t);if(!n.href)return e;var r=Sa(n.href),a=M(t),i=a.text();if(!function(t,e,n,r,a,i){if(void 0!==i.find(function(e){return t===e}))return!1;if(!t||t===e||t===n)return!1;var o=r.hostname;if(Mr.parse(t).hostname!==o)return!1;var s=t.replace(n,"");return!(!Ac.test(s)||xc.test(a)||25<a.length)}(r,k,E,S,i,T))return e;e[r]?e[r].linkText="".concat(e[r].linkText,"|").concat(i):e[r]={score:0,linkText:i,href:r};var o,s,u,c,l,f,h,d,p,m,g,v,y,_,b=e[r],w=(o=a,"".concat(i||o.text()," ").concat(o.attr("class")||""," ").concat(o.attr("id")||"")),A=function(e){var t=e.match(wa);if(!t)return null;var n=ba(t[6],10);return n<100?n:null}(r),x=(s=r,C.test(s)?0:-25);return x+=(u=w,kc.test(u)?50:0),x+=(c=w,Ec.test(c)&&kc.test(c)?-65:0),x+=(l=w,Sc.test(l)?-200:0),x+=(f=a.parent(),d=h=!1,Oi(ps(p=0,4)).forEach(function(){if(0!==f.length){var e,t="".concat((e=f).attr("class")||""," ").concat(e.attr("id")||"");!h&&_i.test(t)&&(h=!0,p+=25),!d&&vi.test(t)&&xc.test(t)&&(gi.test(t)||(d=!0,p-=25)),f=f.parent()}}),p),x+=(m=r,xc.test(m)?-25:0),x+=(g=D,A&&!g?50:0),x+=function(e,t){var n=0;if(ka.test(e.trim())){var r=ba(e,10);n=r<2?-30:Math.max(0,10-r),t&&r<=t&&(n-=50)}return n}(i,A),x+=(y=k,_=r,0<(v=x)?v+-250*(1-new wc.SequenceMatcher(null,y,_).ratio()-.2):0),b.score=x,e},{});return 0===si(r).length?null:r}var Tc={extract:function(e){var t=e.$,n=e.url,r=e.parsedUrl,a=e.previousUrls,i=void 0===a?[]:a;r=r||Mr.parse(n);var o=Sa(n),s=Na(n,r),u=Mc({links:t("a[href]").toArray(),articleUrl:o,baseUrl:s,parsedUrl:r,$:t,previousUrls:i});if(!u)return null;var c=si(u).reduce(function(e,t){var n=u[t];return n.score>e.score?n:e},{score:-100});return 50<=c.score?c.href:null}},Cc=["og:url"];function Dc(e){return{url:e,domain:(t=e,Mr.parse(t).hostname)};var t}var Oc={extract:function(e){var t=e.$,n=e.url,r=e.metaCache,a=t("link[rel=canonical]");if(0!==a.length){var i=a.attr("href");if(i)return Dc(i)}var o=Xo(t,Cc,r);return Dc(o||n)}},jc={ellipse:"…",chars:[" ","-"],max:140,truncate:!0};var Nc=function(e,t,n){if("string"!=typeof e||0===e.length)return"";if(0===t)return"";for(var r in n=n||{},jc)null!==n[r]&&void 0!==n[r]||(n[r]=jc[r]);return n.max=t||n.max,function(e,t,n,r,a){if(e.length<t)return e;for(var i=0,o="",s=Math.floor(t/2),u="middle"===a?s:t,c=0,l=e.length;c<l;c++)if(o=e.charAt(c),-1!==r.indexOf(o)&&"middle"!==a&&(i=c),!(c<u))return 0===i?a?e.substring(0,u-1)+n+("middle"===a?e.substring(e.length-s,e.length):""):"":e.substring(0,i)+n;return e}(e,n.max,n.ellipse,n.chars,n.truncate)},zc=["og:description","twitter:description"];function Pc(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:200;return e=e.replace(/[\s\n]+/g," ").trim(),Nc(e,n,{ellipse:"&hellip;"})}var Lc={extract:function(e){var t=e.$,n=e.content,r=e.metaCache,a=Xo(t,zc,r);if(a)return Pc(es(a,t));return Pc(t(n.slice(0,1e3)).text(),t,200)}},Rc={extract:function(e){var t=e.content;return ua(Cr.load(t)("div").first().text()).split(/\s/).length}},Yc={domain:"*",title:tc.extract,date_published:lc.extract,author:oc.extract,content:Ku.extract.bind(Ku),lead_image_url:yc.extract,dek:function(){return null},next_page_url:Tc.extract,url_and_domain:Oc.extract,excerpt:Lc.extract,word_count:Rc.extract,direction:function(e){var t=e.title;return Os.getDirection(t)},extract:function(e){var t=e.html,n=e.$;if(t&&!n){var r=Cr.load(t);e.$=r}var a=this.title(e),i=this.date_published(e),o=this.author(e),s=this.content(pt({},e,{title:a})),u=this.lead_image_url(pt({},e,{content:s})),c=this.dek(pt({},e,{content:s})),l=this.next_page_url(e),f=this.excerpt(pt({},e,{content:s})),h=this.word_count(pt({},e,{content:s})),d=this.direction({title:a}),p=this.url_and_domain(e);return{title:a,author:o,date_published:i||null,dek:c,lead_image_url:u,content:s,next_page_url:l,url:p.url,domain:p.domain,excerpt:f,word_count:h,direction:d}}},Wc={'meta[name="al:ios:app_name"][value="Medium"]':Es,'meta[name="generator"][value="blogger"]':As};function qc(e,t,n){var r,a,i=(t=t||Mr.parse(e)).hostname,o=i.split(".").slice(-2).join(".");return bs[i]||bs[o]||Ds[i]||Ds[o]||(r=n,a=si(Wc).find(function(e){return 0<r(e).length}),Wc[a])||Yc}function Ic(s){var u=s.$,t=s.type,c=s.extractionOpts,e=s.extractHtml,n=void 0!==e&&e;if(!c)return null;if("string"==typeof c)return c;var a,i,o,r,l=c.selectors,f=c.defaultCleaner,h=void 0===f||f,d=c.allowMultiple,p=(a=u,i=n,o=d,l.find(function(e){if(Ma(e)){if(i)return e.reduce(function(e,t){return e&&0<a(t).length},!0);var t=ja(e,2),n=t[0],r=t[1];return(o||!o&&1===a(n).length)&&a(n).attr(r)&&""!==a(n).attr(r).trim()}return(o||!o&&1===a(e).length)&&""!==a(e).text().trim()}));if(!p)return null;function m(e){var t,n,r,a,i,o;return Go(e,u,s.url||""),t=e,n=u,(r=c.clean)&&n(r.join(","),t).remove(),a=e,i=u,(o=c.transforms)&&si(o).forEach(function(n){var e=i(n,a),r=o[n];"string"==typeof r?e.each(function(e,t){Mi(i(t),i,o[n])}):"function"==typeof r&&e.each(function(e,t){var n=r(i(t),i);"string"==typeof n&&Mi(i(t),i,n)})}),e}if(n)return function(){var e;if(Ma(p)){e=u(p.join(","));var n=u("<div></div>");e.each(function(e,t){n.append(t)}),e=n}else e=u(p);return e.wrap(u("<div></div>")),e=m(e=e.parent()),Vu[t]&&Vu[t](e,pt({},s,{defaultCleaner:h})),d?e.children().toArray().map(function(e){return u.html(u(e))}):u.html(e)}();if(Ma(p)){var g=ja(p,3),v=g[0],y=g[1],_=g[2];r=m(u(v)).map(function(e,t){var n=u(t).attr(y).trim();return _?_(n):n})}else r=m(u(p)).map(function(e,t){return u(t).text().trim()});return r=Ma(r.toArray())&&d?r.toArray():r[0],h&&Vu[t]?Vu[t](r,pt({},s,c)):r}function Hc(t,n){var r={};return si(t).forEach(function(e){r[e]||(r[e]=Ic(pt({},n,{type:e,extractionOpts:t[e]})))}),r}function Fc(e){var t=e.type,n=e.extractor,r=e.fallback,a=void 0===r||r,i=Ic(pt({},e,{extractionOpts:n[t]}));return i||(a?Yc[t](e):null)}var Bc,Gc={extract:function(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:Yc,t=1<arguments.length?arguments[1]:void 0,n=t,r=n.contentOnly,a=n.extractedTitle;if("*"===e.domain)return e.extract(t);if(t=pt({},t,{extractor:e}),r)return{content:Fc(pt({},t,{type:"content",extractHtml:!0,title:a}))};var i=Fc(pt({},t,{type:"title"})),o=Fc(pt({},t,{type:"date_published"})),s=Fc(pt({},t,{type:"author"})),u=Fc(pt({},t,{type:"next_page_url"})),c=Fc(pt({},t,{type:"content",extractHtml:!0,title:i})),l=Fc(pt({},t,{type:"lead_image_url",content:c})),f=Fc(pt({},t,{type:"excerpt",content:c})),h=Fc(pt({},t,{type:"dek",content:c,excerpt:f})),d=Fc(pt({},t,{type:"word_count",content:c})),p=Fc(pt({},t,{type:"direction",title:i})),m=Fc(pt({},t,{type:"url_and_domain"}))||{url:null,domain:null},g=m.url,v=m.domain,y={};return e.extend&&(y=Hc(e.extend,t)),pt({title:i,content:c,author:s,date_published:o,lead_image_url:l,dek:h,next_page_url:u,url:g,domain:v,excerpt:f,word_count:d,direction:p},y)}};function Uc(e){return $c.apply(this,arguments)}function $c(){return($c=Qn(S.mark(function e(t){var n,r,a,i,o,s,u,c,l,f,h,d,p;return S.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:n=t.next_page_url,r=t.html,a=t.$,i=t.metaCache,o=t.result,s=t.Extractor,u=t.title,c=t.url,l=1,f=[Sa(c)];case 3:if(n&&l<26)return l+=1,e.next=7,hs.create(n);e.next=16;break;case 7:a=e.sent,r=a.html(),h={url:n,html:r,$:a,metaCache:i,contentOnly:!0,extractedTitle:u,previousUrls:f},d=Gc.extract(s,h),f.push(n),o=pt({},o,{content:"".concat(o.content,"<hr><h4>Page ").concat(l,"</h4>").concat(d.content)}),n=d.next_page_url,e.next=3;break;case 16:return p=Yc.word_count({content:"<div>".concat(o.content,"</div>")}),e.abrupt("return",pt({},o,{total_pages:l,pages_rendered:l,word_count:p}));case 18:case"end":return e.stop()}},e,this)}))).apply(this,arguments)}return{parse:(Bc=Qn(S.mark(function e(t){var n,r,a,i,o,s,u,c,l,f,h,d,p,m,g,v,y,_,b,w,A,x,k,E=arguments;return S.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(n=1<E.length&&void 0!==E[1]?E[1]:{},r=n.html,a=gt(n,["html"]),i=a.fetchAllPages,o=void 0===i||i,s=a.fallback,u=void 0===s||s,c=a.contentType,l=void 0===c?"html":c,f=a.headers,h=void 0===f?{}:f,d=a.extend,p=a.customExtractor,!t&&Cr.browser&&(t=window.location.href,r=r||Cr.html()),m=Mr.parse(t),m.hostname){e.next=6;break}return e.abrupt("return",{error:!0,message:"The url parameter passed does not look like a valid URL. Please check your URL and try again."});case 6:return e.next=8,hs.create(t,r,m,h);case 8:if((g=e.sent).failed)return e.abrupt("return",g);e.next=11;break;case 11:if(p&&ws(p),v=qc(t,m,g),r||(r=g.html()),y=g("meta").map(function(e,t){return g(t).attr("name")}).toArray(),_={},d&&(_=Hc(d,{$:g,url:t,html:r})),b=Gc.extract(v,{url:t,html:r,$:g,metaCache:y,parsedUrl:m,fallback:u,contentType:l}),A=(w=b).title,x=w.next_page_url,o&&x)return e.next=22,Uc({Extractor:v,next_page_url:x,html:r,$:g,metaCache:y,result:b,title:A,url:t});e.next=25;break;case 22:b=e.sent,e.next=26;break;case 25:b=pt({},b,{total_pages:1,rendered_pages:1});case 26:return"markdown"===l?(k=new na,b.content=k.turndown(b.content)):"text"===l&&(b.content=g.text(g(b.content))),e.abrupt("return",pt({},b,_));case 28:case"end":return e.stop()}},e,this)})),function(e){return Bc.apply(this,arguments)}),browser:!!Cr.browser,fetchResource:function(e){return hs.create(e)},addExtractor:function(e){return ws(e)}}}();

A  => assets/icons/logo-outline-dark.png +0 -0
A  => assets/icons/logo-outline.png +0 -0
A  => assets/icons/logo.png +0 -0
A  => ios/.gitignore +32 -0
@@ 1,32 @@
*.mode1v3
*.mode2v3
*.moved-aside
*.pbxuser
*.perspectivev3
**/*sync/
.sconsign.dblite
.tags*
**/.vagrant/
**/DerivedData/
Icon?
**/Pods/
**/.symlinks/
profile
xcuserdata
**/.generated/
Flutter/App.framework
Flutter/Flutter.framework
Flutter/Flutter.podspec
Flutter/Generated.xcconfig
Flutter/app.flx
Flutter/app.zip
Flutter/flutter_assets/
Flutter/flutter_export_environment.sh
ServiceDefinitions.json
Runner/GeneratedPluginRegistrant.*

# Exceptions to above rules.
!default.mode1v3
!default.mode2v3
!default.pbxuser
!default.perspectivev3

A  => ios/Flutter/AppFrameworkInfo.plist +26 -0
@@ 1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>CFBundleDevelopmentRegion</key>
  <string>$(DEVELOPMENT_LANGUAGE)</string>
  <key>CFBundleExecutable</key>
  <string>App</string>
  <key>CFBundleIdentifier</key>
  <string>io.flutter.flutter.app</string>
  <key>CFBundleInfoDictionaryVersion</key>
  <string>6.0</string>
  <key>CFBundleName</key>
  <string>App</string>
  <key>CFBundlePackageType</key>
  <string>FMWK</string>
  <key>CFBundleShortVersionString</key>
  <string>1.0</string>
  <key>CFBundleSignature</key>
  <string>????</string>
  <key>CFBundleVersion</key>
  <string>1.0</string>
  <key>MinimumOSVersion</key>
  <string>8.0</string>
</dict>
</plist>

A  => ios/Flutter/Debug.xcconfig +2 -0
@@ 1,2 @@
#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
#include "Generated.xcconfig"

A  => ios/Flutter/Release.xcconfig +2 -0
@@ 1,2 @@
#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
#include "Generated.xcconfig"

A  => ios/Podfile +41 -0
@@ 1,41 @@
# Uncomment this line to define a global platform for your project
# platform :ios, '9.0'

# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'

project 'Runner', {
  'Debug' => :debug,
  'Profile' => :release,
  'Release' => :release,
}

def flutter_root
  generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)
  unless File.exist?(generated_xcode_build_settings_path)
    raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first"
  end

  File.foreach(generated_xcode_build_settings_path) do |line|
    matches = line.match(/FLUTTER_ROOT\=(.*)/)
    return matches[1].strip if matches
  end
  raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get"
end

require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)

flutter_ios_podfile_setup

target 'Runner' do
  use_frameworks!
  use_modular_headers!

  flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
end

post_install do |installer|
  installer.pods_project.targets.each do |target|
    flutter_additional_ios_build_settings(target)
  end
end

A  => ios/Podfile.lock +67 -0
@@ 1,67 @@
PODS:
  - Flutter (1.0.0)
  - FMDB (2.7.5):
    - FMDB/standard (= 2.7.5)
  - FMDB/standard (2.7.5)
  - package_info (0.0.1):
    - Flutter
  - path_provider (0.0.1):
    - Flutter
  - share (0.0.1):
    - Flutter
  - shared_preferences (0.0.1):
    - Flutter
  - sqflite (0.0.2):
    - Flutter
    - FMDB (>= 2.7.5)
  - url_launcher (0.0.1):
    - Flutter
  - webview_flutter (0.0.1):
    - Flutter

DEPENDENCIES:
  - Flutter (from `Flutter`)
  - package_info (from `.symlinks/plugins/package_info/ios`)
  - path_provider (from `.symlinks/plugins/path_provider/ios`)
  - share (from `.symlinks/plugins/share/ios`)
  - shared_preferences (from `.symlinks/plugins/shared_preferences/ios`)
  - sqflite (from `.symlinks/plugins/sqflite/ios`)
  - url_launcher (from `.symlinks/plugins/url_launcher/ios`)
  - webview_flutter (from `.symlinks/plugins/webview_flutter/ios`)

SPEC REPOS:
  trunk:
    - FMDB

EXTERNAL SOURCES:
  Flutter:
    :path: Flutter
  package_info:
    :path: ".symlinks/plugins/package_info/ios"
  path_provider:
    :path: ".symlinks/plugins/path_provider/ios"
  share:
    :path: ".symlinks/plugins/share/ios"
  shared_preferences:
    :path: ".symlinks/plugins/shared_preferences/ios"
  sqflite:
    :path: ".symlinks/plugins/sqflite/ios"
  url_launcher:
    :path: ".symlinks/plugins/url_launcher/ios"
  webview_flutter:
    :path: ".symlinks/plugins/webview_flutter/ios"

SPEC CHECKSUMS:
  Flutter: 434fef37c0980e73bb6479ef766c45957d4b510c
  FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
  package_info: 873975fc26034f0b863a300ad47e7f1ac6c7ec62
  path_provider: abfe2b5c733d04e238b0d8691db0cfd63a27a93c
  share: 0b2c3e82132f5888bccca3351c504d0003b3b410
  shared_preferences: af6bfa751691cdc24be3045c43ec037377ada40d
  sqflite: 6d358c025f5b867b29ed92fc697fd34924e11904
  url_launcher: 6fef411d543ceb26efce54b05a0a40bfd74cbbef
  webview_flutter: d2b4d6c66968ad042ad94cbb791f5b72b4678a96

PODFILE CHECKSUM: aafe91acc616949ddb318b77800a7f51bffa2a4c

COCOAPODS: 1.10.0

A  => ios/Runner.xcodeproj/project.pbxproj +578 -0
@@ 1,578 @@
// !$*UTF8*$!
{
	archiveVersion = 1;
	classes = {
	};
	objectVersion = 51;
	objects = {

/* Begin PBXBuildFile section */
		1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
		3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
		74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
		964F0316F934C372F9A289DD /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABF26D092DCFA7AFECAE1958 /* Pods_Runner.framework */; };
		97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
		97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
		97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
/* End PBXBuildFile section */

/* Begin PBXCopyFilesBuildPhase section */
		9705A1C41CF9048500538489 /* Embed Frameworks */ = {
			isa = PBXCopyFilesBuildPhase;
			buildActionMask = 2147483647;
			dstPath = "";
			dstSubfolderSpec = 10;
			files = (
			);
			name = "Embed Frameworks";
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXCopyFilesBuildPhase section */

/* Begin PBXFileReference section */
		1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
		1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
		3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
		40360520B75D3E668845C254 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
		6462689146C9FF38DFEA397D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
		74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
		74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
		7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
		9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
		9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
		97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
		97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
		97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
		97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
		97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
		ABF26D092DCFA7AFECAE1958 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
		F01A29D929A45761F4F09D5C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
		97C146EB1CF9000F007C117D /* Frameworks */ = {
			isa = PBXFrameworksBuildPhase;
			buildActionMask = 2147483647;
			files = (
				964F0316F934C372F9A289DD /* Pods_Runner.framework in Frameworks */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXFrameworksBuildPhase section */

/* Begin PBXGroup section */
		84F9BE3D376DA5597C2A8714 /* Pods */ = {
			isa = PBXGroup;
			children = (
				6462689146C9FF38DFEA397D /* Pods-Runner.debug.xcconfig */,
				F01A29D929A45761F4F09D5C /* Pods-Runner.release.xcconfig */,
				40360520B75D3E668845C254 /* Pods-Runner.profile.xcconfig */,
			);
			path = Pods;
			sourceTree = "<group>";
		};
		9740EEB11CF90186004384FC /* Flutter */ = {
			isa = PBXGroup;
			children = (
				3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
				9740EEB21CF90195004384FC /* Debug.xcconfig */,
				7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
				9740EEB31CF90195004384FC /* Generated.xcconfig */,
			);
			name = Flutter;
			sourceTree = "<group>";
		};
		97C146E51CF9000F007C117D = {
			isa = PBXGroup;
			children = (
				9740EEB11CF90186004384FC /* Flutter */,
				97C146F01CF9000F007C117D /* Runner */,
				97C146EF1CF9000F007C117D /* Products */,
				84F9BE3D376DA5597C2A8714 /* Pods */,
				C460029D548F8C8E174E1334 /* Frameworks */,
			);
			sourceTree = "<group>";
		};
		97C146EF1CF9000F007C117D /* Products */ = {
			isa = PBXGroup;
			children = (
				97C146EE1CF9000F007C117D /* Runner.app */,
			);
			name = Products;
			sourceTree = "<group>";
		};
		97C146F01CF9000F007C117D /* Runner */ = {
			isa = PBXGroup;
			children = (
				97C146FA1CF9000F007C117D /* Main.storyboard */,
				97C146FD1CF9000F007C117D /* Assets.xcassets */,
				97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
				97C147021CF9000F007C117D /* Info.plist */,
				1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
				1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
				74858FAE1ED2DC5600515810 /* AppDelegate.swift */,
				74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */,
			);
			path = Runner;
			sourceTree = "<group>";
		};
		C460029D548F8C8E174E1334 /* Frameworks */ = {
			isa = PBXGroup;
			children = (
				ABF26D092DCFA7AFECAE1958 /* Pods_Runner.framework */,
			);
			name = Frameworks;
			sourceTree = "<group>";
		};
/* End PBXGroup section */

/* Begin PBXNativeTarget section */
		97C146ED1CF9000F007C117D /* Runner */ = {
			isa = PBXNativeTarget;
			buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
			buildPhases = (
				FB456ADB33087A52E724411C /* [CP] Check Pods Manifest.lock */,
				9740EEB61CF901F6004384FC /* Run Script */,
				97C146EA1CF9000F007C117D /* Sources */,
				97C146EB1CF9000F007C117D /* Frameworks */,
				97C146EC1CF9000F007C117D /* Resources */,
				9705A1C41CF9048500538489 /* Embed Frameworks */,
				3B06AD1E1E4923F5004D2608 /* Thin Binary */,
				E2146C78C0EA89D54DE23218 /* [CP] Embed Pods Frameworks */,
			);
			buildRules = (
			);
			dependencies = (
			);
			name = Runner;
			productName = Runner;
			productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
			productType = "com.apple.product-type.application";
		};
/* End PBXNativeTarget section */

/* Begin PBXProject section */
		97C146E61CF9000F007C117D /* Project object */ = {
			isa = PBXProject;
			attributes = {
				LastUpgradeCheck = 1020;
				ORGANIZATIONNAME = "";
				TargetAttributes = {
					97C146ED1CF9000F007C117D = {
						CreatedOnToolsVersion = 7.3.1;
						LastSwiftMigration = 1100;
					};
				};
			};
			buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
			compatibilityVersion = "Xcode 9.3";
			developmentRegion = en;
			hasScannedForEncodings = 0;
			knownRegions = (
				en,
				Base,
			);
			mainGroup = 97C146E51CF9000F007C117D;
			productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
			projectDirPath = "";
			projectRoot = "";
			targets = (
				97C146ED1CF9000F007C117D /* Runner */,
			);
		};
/* End PBXProject section */

/* Begin PBXResourcesBuildPhase section */
		97C146EC1CF9000F007C117D /* Resources */ = {
			isa = PBXResourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
				3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
				97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
				97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXResourcesBuildPhase section */

/* Begin PBXShellScriptBuildPhase section */
		3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
			isa = PBXShellScriptBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			inputPaths = (
			);
			name = "Thin Binary";
			outputPaths = (
			);
			runOnlyForDeploymentPostprocessing = 0;
			shellPath = /bin/sh;
			shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
		};
		9740EEB61CF901F6004384FC /* Run Script */ = {
			isa = PBXShellScriptBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			inputPaths = (
			);
			name = "Run Script";
			outputPaths = (
			);
			runOnlyForDeploymentPostprocessing = 0;
			shellPath = /bin/sh;
			shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
		};
		E2146C78C0EA89D54DE23218 /* [CP] Embed Pods Frameworks */ = {
			isa = PBXShellScriptBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			inputFileListPaths = (
				"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
			);
			name = "[CP] Embed Pods Frameworks";
			outputFileListPaths = (
				"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
			);
			runOnlyForDeploymentPostprocessing = 0;
			shellPath = /bin/sh;
			shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
			showEnvVarsInLog = 0;
		};
		FB456ADB33087A52E724411C /* [CP] Check Pods Manifest.lock */ = {
			isa = PBXShellScriptBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			inputFileListPaths = (
			);
			inputPaths = (
				"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
				"${PODS_ROOT}/Manifest.lock",
			);
			name = "[CP] Check Pods Manifest.lock";
			outputFileListPaths = (
			);
			outputPaths = (
				"$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt",
			);
			runOnlyForDeploymentPostprocessing = 0;
			shellPath = /bin/sh;
			shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n    # print error to STDERR\n    echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n    exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
			showEnvVarsInLog = 0;
		};
/* End PBXShellScriptBuildPhase section */

/* Begin PBXSourcesBuildPhase section */
		97C146EA1CF9000F007C117D /* Sources */ = {
			isa = PBXSourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,
				1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXSourcesBuildPhase section */

/* Begin PBXVariantGroup section */
		97C146FA1CF9000F007C117D /* Main.storyboard */ = {
			isa = PBXVariantGroup;
			children = (
				97C146FB1CF9000F007C117D /* Base */,
			);
			name = Main.storyboard;
			sourceTree = "<group>";
		};
		97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
			isa = PBXVariantGroup;
			children = (
				97C147001CF9000F007C117D /* Base */,
			);
			name = LaunchScreen.storyboard;
			sourceTree = "<group>";
		};
/* End PBXVariantGroup section */

/* Begin XCBuildConfiguration section */
		249021D3217E4FDB00AE95B9 /* Profile */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = NO;
				CLANG_ANALYZER_NONNULL = YES;
				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
				CLANG_CXX_LIBRARY = "libc++";
				CLANG_ENABLE_MODULES = YES;
				CLANG_ENABLE_OBJC_ARC = YES;
				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
				CLANG_WARN_BOOL_CONVERSION = YES;
				CLANG_WARN_COMMA = YES;
				CLANG_WARN_CONSTANT_CONVERSION = YES;
				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
				CLANG_WARN_EMPTY_BODY = YES;
				CLANG_WARN_ENUM_CONVERSION = YES;
				CLANG_WARN_INFINITE_RECURSION = YES;
				CLANG_WARN_INT_CONVERSION = YES;
				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
				CLANG_WARN_STRICT_PROTOTYPES = YES;
				CLANG_WARN_SUSPICIOUS_MOVE = YES;
				CLANG_WARN_UNREACHABLE_CODE = YES;
				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
				COPY_PHASE_STRIP = NO;
				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
				ENABLE_NS_ASSERTIONS = NO;
				ENABLE_STRICT_OBJC_MSGSEND = YES;
				GCC_C_LANGUAGE_STANDARD = gnu99;
				GCC_NO_COMMON_BLOCKS = YES;
				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
				GCC_WARN_UNDECLARED_SELECTOR = YES;
				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
				GCC_WARN_UNUSED_FUNCTION = YES;
				GCC_WARN_UNUSED_VARIABLE = YES;
				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
				MTL_ENABLE_DEBUG_INFO = NO;
				SDKROOT = iphoneos;
				SUPPORTED_PLATFORMS = iphoneos;
				TARGETED_DEVICE_FAMILY = "1,2";
				VALIDATE_PRODUCT = YES;
			};
			name = Profile;
		};
		249021D4217E4FDB00AE95B9 /* Profile */ = {
			isa = XCBuildConfiguration;
			baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
			buildSettings = {
				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
				CLANG_ENABLE_MODULES = YES;
				CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
				DEVELOPMENT_TEAM = P2CG8QD3BP;
				ENABLE_BITCODE = NO;
				FRAMEWORK_SEARCH_PATHS = (
					"$(inherited)",
					"$(PROJECT_DIR)/Flutter",
				);
				INFOPLIST_FILE = Runner/Info.plist;
				LD_RUNPATH_SEARCH_PATHS = (
					"$(inherited)",
					"@executable_path/Frameworks",
				);
				LIBRARY_SEARCH_PATHS = (
					"$(inherited)",
					"$(PROJECT_DIR)/Flutter",
				);
				PRODUCT_BUNDLE_IDENTIFIER = me.hyliu.FluentReaderLite;
				PRODUCT_NAME = "$(TARGET_NAME)";
				SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
				SWIFT_VERSION = 5.0;
				TARGETED_DEVICE_FAMILY = "1,2";
				VERSIONING_SYSTEM = "apple-generic";
			};
			name = Profile;
		};
		97C147031CF9000F007C117D /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = NO;
				CLANG_ANALYZER_NONNULL = YES;
				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
				CLANG_CXX_LIBRARY = "libc++";
				CLANG_ENABLE_MODULES = YES;
				CLANG_ENABLE_OBJC_ARC = YES;
				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
				CLANG_WARN_BOOL_CONVERSION = YES;
				CLANG_WARN_COMMA = YES;
				CLANG_WARN_CONSTANT_CONVERSION = YES;
				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
				CLANG_WARN_EMPTY_BODY = YES;
				CLANG_WARN_ENUM_CONVERSION = YES;
				CLANG_WARN_INFINITE_RECURSION = YES;
				CLANG_WARN_INT_CONVERSION = YES;
				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
				CLANG_WARN_STRICT_PROTOTYPES = YES;
				CLANG_WARN_SUSPICIOUS_MOVE = YES;
				CLANG_WARN_UNREACHABLE_CODE = YES;
				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
				COPY_PHASE_STRIP = NO;
				DEBUG_INFORMATION_FORMAT = dwarf;
				ENABLE_STRICT_OBJC_MSGSEND = YES;
				ENABLE_TESTABILITY = YES;
				GCC_C_LANGUAGE_STANDARD = gnu99;
				GCC_DYNAMIC_NO_PIC = NO;
				GCC_NO_COMMON_BLOCKS = YES;
				GCC_OPTIMIZATION_LEVEL = 0;
				GCC_PREPROCESSOR_DEFINITIONS = (
					"DEBUG=1",
					"$(inherited)",
				);
				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
				GCC_WARN_UNDECLARED_SELECTOR = YES;
				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
				GCC_WARN_UNUSED_FUNCTION = YES;
				GCC_WARN_UNUSED_VARIABLE = YES;
				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
				MTL_ENABLE_DEBUG_INFO = YES;
				ONLY_ACTIVE_ARCH = YES;
				SDKROOT = iphoneos;
				TARGETED_DEVICE_FAMILY = "1,2";
			};
			name = Debug;
		};
		97C147041CF9000F007C117D /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = NO;
				CLANG_ANALYZER_NONNULL = YES;
				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
				CLANG_CXX_LIBRARY = "libc++";
				CLANG_ENABLE_MODULES = YES;
				CLANG_ENABLE_OBJC_ARC = YES;
				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
				CLANG_WARN_BOOL_CONVERSION = YES;
				CLANG_WARN_COMMA = YES;
				CLANG_WARN_CONSTANT_CONVERSION = YES;
				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
				CLANG_WARN_EMPTY_BODY = YES;
				CLANG_WARN_ENUM_CONVERSION = YES;
				CLANG_WARN_INFINITE_RECURSION = YES;
				CLANG_WARN_INT_CONVERSION = YES;
				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
				CLANG_WARN_STRICT_PROTOTYPES = YES;
				CLANG_WARN_SUSPICIOUS_MOVE = YES;
				CLANG_WARN_UNREACHABLE_CODE = YES;
				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
				COPY_PHASE_STRIP = NO;
				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
				ENABLE_NS_ASSERTIONS = NO;
				ENABLE_STRICT_OBJC_MSGSEND = YES;
				GCC_C_LANGUAGE_STANDARD = gnu99;
				GCC_NO_COMMON_BLOCKS = YES;
				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
				GCC_WARN_UNDECLARED_SELECTOR = YES;
				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
				GCC_WARN_UNUSED_FUNCTION = YES;
				GCC_WARN_UNUSED_VARIABLE = YES;
				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
				MTL_ENABLE_DEBUG_INFO = NO;
				SDKROOT = iphoneos;
				SUPPORTED_PLATFORMS = iphoneos;
				SWIFT_COMPILATION_MODE = wholemodule;
				SWIFT_OPTIMIZATION_LEVEL = "-O";
				TARGETED_DEVICE_FAMILY = "1,2";
				VALIDATE_PRODUCT = YES;
			};
			name = Release;
		};
		97C147061CF9000F007C117D /* Debug */ = {
			isa = XCBuildConfiguration;
			baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
			buildSettings = {
				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
				CLANG_ENABLE_MODULES = YES;
				CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
				DEVELOPMENT_TEAM = P2CG8QD3BP;
				ENABLE_BITCODE = NO;
				FRAMEWORK_SEARCH_PATHS = (
					"$(inherited)",
					"$(PROJECT_DIR)/Flutter",
				);
				INFOPLIST_FILE = Runner/Info.plist;
				LD_RUNPATH_SEARCH_PATHS = (
					"$(inherited)",
					"@executable_path/Frameworks",
				);
				LIBRARY_SEARCH_PATHS = (
					"$(inherited)",
					"$(PROJECT_DIR)/Flutter",
				);
				PRODUCT_BUNDLE_IDENTIFIER = me.hyliu.FluentReaderLite;
				PRODUCT_NAME = "$(TARGET_NAME)";
				SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
				SWIFT_VERSION = 5.0;
				TARGETED_DEVICE_FAMILY = "1,2";
				VERSIONING_SYSTEM = "apple-generic";
			};
			name = Debug;
		};
		97C147071CF9000F007C117D /* Release */ = {
			isa = XCBuildConfiguration;
			baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
			buildSettings = {
				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
				CLANG_ENABLE_MODULES = YES;
				CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
				DEVELOPMENT_TEAM = P2CG8QD3BP;
				ENABLE_BITCODE = NO;
				FRAMEWORK_SEARCH_PATHS = (
					"$(inherited)",
					"$(PROJECT_DIR)/Flutter",
				);
				INFOPLIST_FILE = Runner/Info.plist;
				LD_RUNPATH_SEARCH_PATHS = (
					"$(inherited)",
					"@executable_path/Frameworks",
				);
				LIBRARY_SEARCH_PATHS = (
					"$(inherited)",
					"$(PROJECT_DIR)/Flutter",
				);
				PRODUCT_BUNDLE_IDENTIFIER = me.hyliu.FluentReaderLite;
				PRODUCT_NAME = "$(TARGET_NAME)";
				SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
				SWIFT_VERSION = 5.0;
				TARGETED_DEVICE_FAMILY = "1,2";
				VERSIONING_SYSTEM = "apple-generic";
			};
			name = Release;
		};
/* End XCBuildConfiguration section */

/* Begin XCConfigurationList section */
		97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				97C147031CF9000F007C117D /* Debug */,
				97C147041CF9000F007C117D /* Release */,
				249021D3217E4FDB00AE95B9 /* Profile */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
		97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				97C147061CF9000F007C117D /* Debug */,
				97C147071CF9000F007C117D /* Release */,
				249021D4217E4FDB00AE95B9 /* Profile */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
/* End XCConfigurationList section */
	};
	rootObject = 97C146E61CF9000F007C117D /* Project object */;
}

A  => ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
@@ 1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
   version = "1.0">
   <FileRef
      location = "group:Runner.xcodeproj">
   </FileRef>
</Workspace>

A  => ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
@@ 1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>IDEDidComputeMac32BitWarning</key>
	<true/>
</dict>
</plist>

A  => ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +8 -0
@@ 1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>PreviewsEnabled</key>
	<false/>
</dict>
</plist>

A  => ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +91 -0
@@ 1,91 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
   LastUpgradeVersion = "1020"
   version = "1.3">
   <BuildAction
      parallelizeBuildables = "YES"
      buildImplicitDependencies = "YES">
      <BuildActionEntries>
         <BuildActionEntry
            buildForTesting = "YES"
            buildForRunning = "YES"
            buildForProfiling = "YES"
            buildForArchiving = "YES"
            buildForAnalyzing = "YES">
            <BuildableReference
               BuildableIdentifier = "primary"
               BlueprintIdentifier = "97C146ED1CF9000F007C117D"
               BuildableName = "Runner.app"
               BlueprintName = "Runner"
               ReferencedContainer = "container:Runner.xcodeproj">
            </BuildableReference>
         </BuildActionEntry>
      </BuildActionEntries>
   </BuildAction>
   <TestAction
      buildConfiguration = "Debug"
      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
      shouldUseLaunchSchemeArgsEnv = "YES">
      <Testables>
      </Testables>
      <MacroExpansion>
         <BuildableReference
            BuildableIdentifier = "primary"
            BlueprintIdentifier = "97C146ED1CF9000F007C117D"
            BuildableName = "Runner.app"
            BlueprintName = "Runner"
            ReferencedContainer = "container:Runner.xcodeproj">
         </BuildableReference>
      </MacroExpansion>
      <AdditionalOptions>
      </AdditionalOptions>
   </TestAction>
   <LaunchAction
      buildConfiguration = "Debug"
      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
      launchStyle = "0"
      useCustomWorkingDirectory = "NO"
      ignoresPersistentStateOnLaunch = "NO"
      debugDocumentVersioning = "YES"
      debugServiceExtension = "internal"
      allowLocationSimulation = "YES">
      <BuildableProductRunnable
         runnableDebuggingMode = "0">
         <BuildableReference
            BuildableIdentifier = "primary"
            BlueprintIdentifier = "97C146ED1CF9000F007C117D"
            BuildableName = "Runner.app"
            BlueprintName = "Runner"
            ReferencedContainer = "container:Runner.xcodeproj">
         </BuildableReference>
      </BuildableProductRunnable>
      <AdditionalOptions>
      </AdditionalOptions>
   </LaunchAction>
   <ProfileAction
      buildConfiguration = "Profile"
      shouldUseLaunchSchemeArgsEnv = "YES"
      savedToolIdentifier = ""
      useCustomWorkingDirectory = "NO"
      debugDocumentVersioning = "YES">
      <BuildableProductRunnable
         runnableDebuggingMode = "0">
         <BuildableReference
            BuildableIdentifier = "primary"
            BlueprintIdentifier = "97C146ED1CF9000F007C117D"
            BuildableName = "Runner.app"
            BlueprintName = "Runner"
            ReferencedContainer = "container:Runner.xcodeproj">
         </BuildableReference>
      </BuildableProductRunnable>
   </ProfileAction>
   <AnalyzeAction
      buildConfiguration = "Debug">
   </AnalyzeAction>
   <ArchiveAction
      buildConfiguration = "Release"
      revealArchiveInOrganizer = "YES">
   </ArchiveAction>
</Scheme>

A  => ios/Runner.xcworkspace/contents.xcworkspacedata +10 -0
@@ 1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
   version = "1.0">
   <FileRef
      location = "group:Runner.xcodeproj">
   </FileRef>
   <FileRef
      location = "group:Pods/Pods.xcodeproj">
   </FileRef>
</Workspace>

A  => ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
@@ 1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>IDEDidComputeMac32BitWarning</key>
	<true/>
</dict>
</plist>

A  => ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +8 -0
@@ 1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>PreviewsEnabled</key>
	<false/>
</dict>
</plist>

A  => ios/Runner/AppDelegate.swift +13 -0
@@ 1,13 @@
import UIKit
import Flutter

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
  override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -> Bool {
    GeneratedPluginRegistrant.register(with: self)
    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  }
}

A  => ios/Runner/Assets.xcassets/AppIcon.appiconset/100.png +0 -0
A  => ios/Runner/Assets.xcassets/AppIcon.appiconset/1024.png +0 -0
A  => ios/Runner/Assets.xcassets/AppIcon.appiconset/114.png +0 -0
A  => ios/Runner/Assets.xcassets/AppIcon.appiconset/120.png +0 -0
A  => ios/Runner/Assets.xcassets/AppIcon.appiconset/144.png +0 -0
A  => ios/Runner/Assets.xcassets/AppIcon.appiconset/152.png +0 -0
A  => ios/Runner/Assets.xcassets/AppIcon.appiconset/167.png +0 -0
A  => ios/Runner/Assets.xcassets/AppIcon.appiconset/180.png +0 -0
A  => ios/Runner/Assets.xcassets/AppIcon.appiconset/20.png +0 -0
A  => ios/Runner/Assets.xcassets/AppIcon.appiconset/29.png +0 -0
A  => ios/Runner/Assets.xcassets/AppIcon.appiconset/40.png +0 -0
A  => ios/Runner/Assets.xcassets/AppIcon.appiconset/50.png +0 -0
A  => ios/Runner/Assets.xcassets/AppIcon.appiconset/57.png +0 -0
A  => ios/Runner/Assets.xcassets/AppIcon.appiconset/58.png +0 -0
A  => ios/Runner/Assets.xcassets/AppIcon.appiconset/60.png +0 -0
A  => ios/Runner/Assets.xcassets/AppIcon.appiconset/72.png +0 -0
A  => ios/Runner/Assets.xcassets/AppIcon.appiconset/76.png +0 -0
A  => ios/Runner/Assets.xcassets/AppIcon.appiconset/80.png +0 -0
A  => ios/Runner/Assets.xcassets/AppIcon.appiconset/87.png +0 -0
A  => ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +1 -0
@@ 1,1 @@
{"images":[{"size":"60x60","expected-size":"180","filename":"180.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"40x40","expected-size":"80","filename":"80.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"40x40","expected-size":"120","filename":"120.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"60x60","expected-size":"120","filename":"120.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"57x57","expected-size":"57","filename":"57.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"1x"},{"size":"29x29","expected-size":"58","filename":"58.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"29x29","expected-size":"29","filename":"29.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"1x"},{"size":"29x29","expected-size":"87","filename":"87.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"57x57","expected-size":"114","filename":"114.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"20x20","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"20x20","expected-size":"60","filename":"60.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"1024x1024","filename":"1024.png","expected-size":"1024","idiom":"ios-marketing","folder":"Assets.xcassets/AppIcon.appiconset/","scale":"1x"},{"size":"40x40","expected-size":"80","filename":"80.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"72x72","expected-size":"72","filename":"72.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"76x76","expected-size":"152","filename":"152.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"50x50","expected-size":"100","filename":"100.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"29x29","expected-size":"58","filename":"58.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"76x76","expected-size":"76","filename":"76.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"29x29","expected-size":"29","filename":"29.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"50x50","expected-size":"50","filename":"50.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"72x72","expected-size":"144","filename":"144.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"40x40","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"83.5x83.5","expected-size":"167","filename":"167.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"20x20","expected-size":"20","filename":"20.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"20x20","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"}]}
\ No newline at end of file

A  => ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json +23 -0
@@ 1,23 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "filename" : "LaunchImage.png",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "LaunchImage@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "LaunchImage@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

A  => ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png +0 -0
A  => ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png +0 -0
A  => ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png +0 -0
A  => ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md +5 -0
@@ 1,5 @@
# Launch Screen Assets

You can customize the launch screen with your own desired assets by replacing the image files in this directory.

You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.
\ No newline at end of file

A  => ios/Runner/Base.lproj/LaunchScreen.storyboard +37 -0
@@ 1,37 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="12121" systemVersion="16G29" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12089"/>
    </dependencies>
    <scenes>
        <!--View Controller-->
        <scene sceneID="EHf-IW-A2E">
            <objects>
                <viewController id="01J-lp-oVM" sceneMemberID="viewController">
                    <layoutGuides>
                        <viewControllerLayoutGuide type="top" id="Ydg-fD-yQy"/>
                        <viewControllerLayoutGuide type="bottom" id="xbc-2k-c8Z"/>
                    </layoutGuides>
                    <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <subviews>
                            <imageView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" image="LaunchImage" translatesAutoresizingMaskIntoConstraints="NO" id="YRO-k0-Ey4">
                            </imageView>
                        </subviews>
                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <constraints>
                            <constraint firstItem="YRO-k0-Ey4" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="1a2-6s-vTC"/>
                            <constraint firstItem="YRO-k0-Ey4" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="centerY" id="4X2-HB-R7a"/>
                        </constraints>
                    </view>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="53" y="375"/>
        </scene>
    </scenes>
    <resources>
        <image name="LaunchImage" width="168" height="185"/>
    </resources>
</document>

A  => ios/Runner/Base.lproj/Main.storyboard +26 -0
@@ 1,26 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="10117" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="BYZ-38-t0r">
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
    </dependencies>
    <scenes>
        <!--Flutter View Controller-->
        <scene sceneID="tne-QT-ifu">
            <objects>
                <viewController id="BYZ-38-t0r" customClass="FlutterViewController" sceneMemberID="viewController">
                    <layoutGuides>
                        <viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
                        <viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
                    </layoutGuides>
                    <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
                        <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
                    </view>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
            </objects>
        </scene>
    </scenes>
</document>

A  => ios/Runner/Info.plist +57 -0
@@ 1,57 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>CFBundleDevelopmentRegion</key>
	<string>$(DEVELOPMENT_LANGUAGE)</string>
	<key>CFBundleDisplayName</key>
	<string>Fluent Reader</string>
	<key>CFBundleExecutable</key>
	<string>$(EXECUTABLE_NAME)</string>
	<key>CFBundleIdentifier</key>
	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
	<key>CFBundleInfoDictionaryVersion</key>
	<string>6.0</string>
	<key>CFBundleLocalizations</key>
	<array>
		<string>en</string>
		<string>zh_CN</string>
	</array>
	<key>CFBundleName</key>
	<string>fluent_reader_lite</string>
	<key>CFBundlePackageType</key>
	<string>APPL</string>
	<key>CFBundleShortVersionString</key>
	<string>$(FLUTTER_BUILD_NAME)</string>
	<key>CFBundleSignature</key>
	<string>????</string>
	<key>CFBundleVersion</key>
	<string>$(FLUTTER_BUILD_NUMBER)</string>
	<key>LSRequiresIPhoneOS</key>
	<true/>
	<key>NSAppTransportSecurity</key>
	<dict>
		<key>NSAllowsArbitraryLoads</key>
		<true/>
	</dict>
	<key>UILaunchStoryboardName</key>
	<string>LaunchScreen</string>
	<key>UIMainStoryboardFile</key>
	<string>Main</string>
	<key>UISupportedInterfaceOrientations</key>
	<array>
		<string>UIInterfaceOrientationPortrait</string>
	</array>
	<key>UISupportedInterfaceOrientations~ipad</key>
	<array>
		<string>UIInterfaceOrientationPortrait</string>
		<string>UIInterfaceOrientationPortraitUpsideDown</string>
		<string>UIInterfaceOrientationLandscapeLeft</string>
		<string>UIInterfaceOrientationLandscapeRight</string>
	</array>
	<key>UIViewControllerBasedStatusBarAppearance</key>
	<false/>
	<key>io.flutter.embedded_views_preview</key>
	<true/>
</dict>
</plist>

A  => ios/Runner/Runner-Bridging-Header.h +1 -0
@@ 1,1 @@
#import "GeneratedPluginRegistrant.h"

A  => lib/components/article_item.dart +268 -0
@@ 1,268 @@
import 'package:cached_network_image/cached_network_image.dart';
import 'package:fluent_reader_lite/components/dismissible_background.dart';
import 'package:fluent_reader_lite/components/favicon.dart';
import 'package:fluent_reader_lite/components/time_text.dart';
import 'package:fluent_reader_lite/models/feeds_model.dart';
import 'package:fluent_reader_lite/models/item.dart';
import 'package:fluent_reader_lite/models/source.dart';
import 'package:fluent_reader_lite/pages/article_page.dart';
import 'package:fluent_reader_lite/utils/colors.dart';
import 'package:fluent_reader_lite/utils/global.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:share/share.dart';
import 'package:tuple/tuple.dart';
import 'package:url_launcher/url_launcher.dart';

class ArticleItem extends StatefulWidget {
  final RSSItem item;
  final RSSSource source;
  final Function openActionSheet;

  ArticleItem(this.item, this.source, this.openActionSheet, {Key key}) : super(key: key);

  @override
  _ArticleItemState createState() => _ArticleItemState();
}

class _ArticleItemState extends State<ArticleItem> {
  bool pressed = false;

  void _openArticle() {
    Navigator.of(context, rootNavigator: true).popUntil((route) {
      return route.isFirst;
    });
    if (!widget.item.hasRead) {
      Global.itemsModel.updateItem(widget.item.id, read: true);
    }
    if (widget.source.openTarget == SourceOpenTarget.External) {
      launch(widget.item.link, forceSafariVC: false, forceWebView: false);
    } else {
      var isSource = Navigator.of(context).canPop();
      if (ArticlePage.state.currentWidget != null) {
        ArticlePage.state.currentState.loadNewItem(
          widget.item.id,
          isSource: isSource,
        );
      } else {
        var navigator = Global.responsiveNavigator(context);
        while (navigator.canPop()) navigator.pop();
        navigator.pushNamed(
          "/article", 
          arguments: Tuple2(widget.item.id, isSource)
        );
      }
    }
  }

  void _openActionSheet() {
    HapticFeedback.mediumImpact();
    widget.openActionSheet(widget.item);
  }

  Widget _imagePlaceholderBuilder(BuildContext context, String _) {
    return Container(
      color: CupertinoColors.systemGrey5.resolveFrom(context)
    );
  }

  static final _unreadIndicator = Padding(
    padding: EdgeInsets.symmetric(horizontal: 4),
    child: Icon(
      CupertinoIcons.circle_fill,
      size: 8,
      color: MyColors.indicatorOrange,
    ),
  );
  static final _starredIndicator = Padding(
    padding: EdgeInsets.symmetric(horizontal: 4),
    child: Icon(
      CupertinoIcons.star_fill,
      size: 9,
      color: MyColors.indicatorOrange,
    ),
  );

  IconData _getDismissIcon(ItemSwipeOption option) {
    switch (option) {
      case ItemSwipeOption.ToggleRead:
        return widget.item.hasRead
          ? Icons.radio_button_checked
          : Icons.radio_button_unchecked;
      case ItemSwipeOption.ToggleStar:
        return widget.item.starred
          ? CupertinoIcons.star
          : CupertinoIcons.star_fill;
      case ItemSwipeOption.Share:
        return CupertinoIcons.share;
      case ItemSwipeOption.OpenMenu:
        return CupertinoIcons.ellipsis;
      case ItemSwipeOption.OpenExternal:
        return CupertinoIcons.square_arrow_right;
    }
    return null;
  }

  void _performSwipeAction(ItemSwipeOption option) async {
    switch(option) {
      case ItemSwipeOption.ToggleRead:
        await Future.delayed(Duration(milliseconds: 200));
        Global.itemsModel.updateItem(widget.item.id, read: !widget.item.hasRead);
        break;
      case ItemSwipeOption.ToggleStar:
        await Future.delayed(Duration(milliseconds: 200));
        Global.itemsModel.updateItem(widget.item.id, starred: !widget.item.starred);
        break;
      case ItemSwipeOption.Share:
        Share.share(widget.item.link);
        break;
      case ItemSwipeOption.OpenMenu:
        widget.openActionSheet(widget.item);
        break;
      case ItemSwipeOption.OpenExternal:
        if (!widget.item.hasRead) {
          Global.itemsModel.updateItem(widget.item.id, read: true);
        }
        launch(widget.item.link, forceSafariVC: false, forceWebView: false);
        break;
    }
  }

  Future<bool> _onDismiss(DismissDirection direction) async {
    HapticFeedback.mediumImpact();
    if (direction == DismissDirection.startToEnd) {
      _performSwipeAction(Global.feedsModel.swipeR);
    } else {
      _performSwipeAction(Global.feedsModel.swipeL);
    }
    return false;
  }

  static const _dismissThresholds = {
    DismissDirection.horizontal: 0.25,
  };

  @override
  Widget build(BuildContext context) {
    final _descStyle = TextStyle(
      fontSize: 12,
      color: CupertinoColors.secondaryLabel.resolveFrom(context),
    );
    final _titleStyle = TextStyle(
      fontSize: 16,
      fontWeight: FontWeight.bold,
      color: Global.feedsModel.dimRead && widget.item.hasRead
        ? CupertinoColors.secondaryLabel.resolveFrom(context)
        : CupertinoColors.label.resolveFrom(context),
    );
    final _snippetStyle = TextStyle(
      fontSize: 16,
      color: CupertinoColors.secondaryLabel.resolveFrom(context),
    );
    final infoLine = Padding(
      padding: EdgeInsets.only(bottom: 4),
      child: Row(
      mainAxisAlignment: MainAxisAlignment.spaceBetween,
      children: [
          Expanded(child: Text(
            widget.source.name,
            style: _descStyle,
            overflow: TextOverflow.ellipsis,
          )),
          Row(children: [
            if (!Global.feedsModel.dimRead && !widget.item.hasRead) _unreadIndicator,
            if (widget.item.starred) _starredIndicator,
            TimeText(widget.item.date, style: _descStyle),
          ]),
        ],
      ),
    );
    final itemTexts = Expanded(
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          Text(
            widget.item.title, 
            style: _titleStyle,
          ),
          if (Global.feedsModel.showSnippet && widget.item.snippet.length > 0) Text(
            widget.item.snippet,
            style: _snippetStyle,
            overflow: TextOverflow.ellipsis,
            maxLines: 1,
          ),
      ],)
    );
    final body = GestureDetector(
      onTapDown: (_) { setState(() { pressed = true; }); },
      onTapUp: (_) { setState(() { pressed = false; }); },
      onTapCancel: () { setState(() { pressed = false; }); },
      onLongPress: _openActionSheet,
      onTap: _openArticle,
      child: Container(
        color: pressed 
          ? CupertinoColors.systemGrey4.resolveFrom(context) 
          : CupertinoColors.systemBackground.resolveFrom(context),
        child: Column(children: [
          Padding(
            padding: EdgeInsets.fromLTRB(16, 8, 16, 8),
            child: Row(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                Padding(
                  padding: EdgeInsets.fromLTRB(0, 20, 8, 0),
                  child: Favicon(widget.source),
                ),
                Expanded(
                  flex: 1,
                  child: Column(
                    children: [
                      infoLine,
                      Row(
                        crossAxisAlignment: CrossAxisAlignment.start,
                        children: [
                          itemTexts,
                          if (Global.feedsModel.showThumb && widget.item.thumb != null) Padding(
                            padding: EdgeInsets.only(left: 4),
                            child: ClipRRect(
                              borderRadius: BorderRadius.circular(4),
                              child: CachedNetworkImage(
                                imageUrl: widget.item.thumb,
                                width: 64, height: 64, fit: BoxFit.cover,
                                placeholder: _imagePlaceholderBuilder,
                              ),
                            ),
                          ),
                        ],
                      ),
                    ],
                  ),
                ),
              ],
            ),
          ),
          Container(
            color: CupertinoColors.systemBackground.resolveFrom(context),
            padding: EdgeInsets.only(left: 16),
            child: Divider(color: CupertinoColors.systemGrey4.resolveFrom(context), height: 1),
          ),
        ])
      )
    );
    return Dismissible(
      key: Key("D-${widget.item.id}"),
      background: DismissibleBackground(
        _getDismissIcon(Global.feedsModel.swipeR),
        true,
      ),
      secondaryBackground: DismissibleBackground(
        _getDismissIcon(Global.feedsModel.swipeL),
        false,
      ),
      dismissThresholds: _dismissThresholds,
      confirmDismiss: _onDismiss,
      child: body,
    );
  }
}
\ No newline at end of file

A  => lib/components/badge.dart +29 -0
@@ 1,29 @@
import 'package:flutter/cupertino.dart';

class Badge extends StatelessWidget {
  Badge(int count, {this.color : CupertinoColors.systemRed, Key key}) :
    label = count >= 1000 ? "999+" : count.toString(),
    super(key: key);

  final String label;
  final CupertinoDynamicColor color;
  final labelStyle = TextStyle(
    color: CupertinoColors.white,
    fontSize: 12
  );

  Widget build(BuildContext context) => Padding(
    padding: EdgeInsets.all(3),
    child: ClipRRect(
      borderRadius: BorderRadius.circular(8),
      child: Container(
        height: 16,
        color: color.resolveFrom(context),
        child: Padding(
          padding: EdgeInsets.symmetric(horizontal: 6, vertical: 1),
          child: Text(label, style: labelStyle,),
        ),
      ),
    )
  );
}
\ No newline at end of file

A  => lib/components/cupertino_toolbar.dart +136 -0
@@ 1,136 @@
/*
 * cupertino_toolbar
 * Copyright (c) 2019 Christian Mengler. All rights reserved.
 * See LICENSE for distribution and usage details.
 */

import 'package:fluent_reader_lite/utils/colors.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/widgets.dart';

/// Display a persistent bottom iOS styled toolbar for Cupertino theme
///
class CupertinoToolbar extends StatelessWidget {
  /// Creates a persistent bottom iOS styled toolbar for Cupertino
  /// themed app,
  ///
  /// Typically used as the [child] attribute of a [CupertinoPageScaffold].
  ///
  /// {@tool sample}
  ///
  /// A sample code implementing a typical iOS page with bottom toolbar.
  ///
  /// ```dart
  /// CupertinoPageScaffold(
  /// 	navigationBar: CupertinoNavigationBar(
  /// 		middle: Text('Cupertino Toolbar')
  /// 	),
  /// 	child: CupertinoToolbar(
  /// 		items: <CupertinoToolbarItem>[
  /// 			CupertinoToolbarItem(
  /// 				icon: CupertinoIcons.delete,
  /// 				onPressed: () {}
  /// 			),
  /// 			CupertinoToolbarItem(
  /// 				icon: CupertinoIcons.settings,
  /// 				onPressed: () {}
  /// 			)
  /// 		],
  /// 		body: Center(
  /// 			child: Text('Hello World')
  /// 		)
  /// 	)
  /// )
  /// ```
  /// {@end-tool}
  ///
  CupertinoToolbar({
    Key key,
    @required this.items,
    @required this.body
  }) : assert(items != null),
       assert(
        items.every((CupertinoToolbarItem item) => (item.icon != null)) == true,
        'Every item must have an icon and onPressed defined',
       ),
       assert(body != null),
       super(key: key);

  /// The interactive items laid out within the toolbar where each item has an icon.
  final List<CupertinoToolbarItem> items;

  /// The body displayed above the toolbar.
  final Widget body;

  @override
  Widget build(BuildContext context) {
    return Column(
      children: <Widget>[
        Expanded(
          child: body
        ),
        Container(
          decoration: BoxDecoration(
            border: Border(
              top: BorderSide(color: MyColors.barDivider.resolveFrom(context), width: 0.0)
            )
          ),
          child: SafeArea(
            top: false,
            child: SizedBox(
              height: 44.0,
              child: Row(
                mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                children: _createButtons()
              )
            )
          )
        )
      ]
    );
  }

  List<Widget> _createButtons() {
    final List<Widget> children = <Widget>[];
    for (int i = 0; i < items.length; i += 1) {
      children.add(CupertinoButton(
        padding: EdgeInsets.zero,
        child: Icon(
          items[i].icon,
          // color: CupertinoColors.systemBlue,
          semanticLabel: items[i].semanticLabel,
        ),
        onPressed: items[i].onPressed
      ));
    }
    return children;
  }
}

/// An interactive button within iOS themed [CupertinoToolbar]
class CupertinoToolbarItem {
  /// Creates an item that is used with [CupertinoToolbar.items].
  ///
  /// The argument [icon] should not be null.
  const CupertinoToolbarItem({
    @required this.icon,
    this.onPressed,
    this.semanticLabel
  }) : assert(icon != null);

  /// The icon of the item.
  ///
  /// This attribute must not be null.
  final IconData icon;

  /// The callback that is called when the item is tapped.
  ///
  /// This attribute must not be null.
  final VoidCallback onPressed;

  /// Semantic label for the icon.
  ///
  /// Announced in accessibility modes (e.g TalkBack/VoiceOver).
  /// This label does not show in the UI.
  final String semanticLabel;
}
\ No newline at end of file

A  => lib/components/dismissible_background.dart +25 -0
@@ 1,25 @@
import 'package:flutter/cupertino.dart';

class DismissibleBackground extends StatelessWidget {
  final IconData icon;
  final bool isToRight;

  DismissibleBackground(this.icon, this.isToRight, {Key key})
    : super(key: key);

  @override
  Widget build(BuildContext context) => Container(
    color: CupertinoColors.systemGrey5.resolveFrom(context),
    padding: EdgeInsets.symmetric(horizontal: 24),
    child: Column(
      mainAxisAlignment: MainAxisAlignment.center,
      crossAxisAlignment: isToRight
        ? CrossAxisAlignment.start
        : CrossAxisAlignment.end,
      children: [Icon(
        icon,
        color: CupertinoColors.secondaryLabel.resolveFrom(context),
      )],
    ),
  );
}
\ No newline at end of file

A  => lib/components/favicon.dart +36 -0
@@ 1,36 @@
import 'package:cached_network_image/cached_network_image.dart';
import 'package:fluent_reader_lite/models/source.dart';
import 'package:flutter/cupertino.dart';

class Favicon extends StatelessWidget {
  final RSSSource source;
  final double size;

  const Favicon(this.source, {this.size: 16, Key key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    final _textStyle = TextStyle(
      fontSize: size - 5,
      color: CupertinoColors.systemGrey6,
    );
    
    if (source.iconUrl != null && source.iconUrl.length > 0) {
      return CachedNetworkImage(
        imageUrl: source.iconUrl,
        width: size,
        height: size,
      );
    } else {
      return Container(
        width: size,
        height: size,
        color: CupertinoColors.systemGrey2,
        child: Center(child: Text(
          source.name.length > 0 ? source.name[0] : "?",
          style: _textStyle,
        )),
      );
    }
  }
}
\ No newline at end of file

A  => lib/components/list_tile_group.dart +60 -0
@@ 1,60 @@
import 'package:fluent_reader_lite/components/my_list_tile.dart';
import 'package:fluent_reader_lite/utils/colors.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:tuple/tuple.dart';

class ListTileGroup extends StatelessWidget {
  ListTileGroup(this.children, {this.title, Key key}) : super(key: key);

  ListTileGroup.fromOptions(
    List<Tuple2<String, dynamic>> options, 
    dynamic selected, 
    Function onSelected,
    {this.title, Key key}) :
    children = options.map((t) => MyListTile(
      title: Text(t.item1),
      trailing: t.item2 == selected
        ? Icon(Icons.done)
        : Icon(null),
      trailingChevron: false,
      onTap: () { onSelected(t.item2); },
      withDivider: t.item2 != options.last.item2,
    )),
    super(key: key);

  final Iterable<Widget> children;
  final String title;

  static const _titleStyle = TextStyle(
    fontSize: 12,
    color: CupertinoColors.systemGrey,
  );

  @override
  Widget build(BuildContext context) => Column(
    crossAxisAlignment: CrossAxisAlignment.start,
    children: [
      if (title != null) Padding(
        padding: EdgeInsets.symmetric(horizontal: 16, vertical: 6),
        child: Text(title, style: _titleStyle),
      ),
      Container(
        color: MyColors.tileBackground.resolveFrom(context),
        child: Column(children: [
          Divider(
            color: CupertinoColors.systemGrey5.resolveFrom(context),
            height: 1,
            thickness: 1,
          ),
          ...children,
          Divider(
            color: CupertinoColors.systemGrey5.resolveFrom(context),
            height: 1,
            thickness: 1,
          ),
        ],
      ),
    ),
  ],);
}
\ No newline at end of file

A  => lib/components/mark_all_action_sheet.dart +52 -0
@@ 1,52 @@
import 'package:fluent_reader_lite/components/responsive_action_sheet.dart';
import 'package:fluent_reader_lite/generated/l10n.dart';
import 'package:fluent_reader_lite/utils/global.dart';
import 'package:flutter/cupertino.dart';

class MarkAllActionSheet extends StatelessWidget {
  final Set<String> sids;

  MarkAllActionSheet(this.sids, {Key key}) : super(key: key);

  DateTime _offset(int days) {
    return DateTime.now().subtract(Duration(days: days));
  }

  void _markAll(BuildContext context, {DateTime date}) {
    Navigator.of(context, rootNavigator: true).pop();
    Global.itemsModel.markAllRead(sids, date: date);
  }

  @override
  Widget build(BuildContext context) {
    final sheet = CupertinoActionSheet(
      title: Text(S.of(context).markAll),
      actions: [
        CupertinoActionSheetAction(
          isDestructiveAction: true,
          child: Text(S.of(context).allArticles),
          onPressed: () { _markAll(context); },
        ),
        CupertinoActionSheetAction(
          child: Text(S.of(context).daysAgo(1)),
          onPressed: () { _markAll(context, date: _offset(1)); },
        ),
        CupertinoActionSheetAction(
          child: Text(S.of(context).daysAgo(3)),
          onPressed: () { _markAll(context, date: _offset(3)); },
        ),
        CupertinoActionSheetAction(
          child: Text(S.of(context).daysAgo(7)),
          onPressed: () { _markAll(context, date: _offset(7)); },
        ),
      ],
      cancelButton: CupertinoActionSheetAction(
        child: Text(S.of(context).cancel),
        onPressed: () { 
          Navigator.of(context, rootNavigator: true).pop();
        },
      ),
    ); 
    return ResponsiveActionSheet(sheet);    
  }
}
\ No newline at end of file

A  => lib/components/my_list_tile.dart +100 -0
@@ 1,100 @@
import 'package:fluent_reader_lite/utils/colors.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';

class MyListTile extends StatefulWidget {
  final Widget leading;
  final Widget title;
  final Widget trailing;
  final bool trailingChevron;
  final bool withDivider;
  final Function onTap;
  final CupertinoDynamicColor background;

  MyListTile({
    this.leading,
    @required this.title,
    this.trailing,
    this.trailingChevron : true,
    this.withDivider : true,
    this.onTap,
    this.background : MyColors.tileBackground,
    Key key,
  }) : super(key: key);

  @override
  _MyListTileState createState() => _MyListTileState();
}

class _MyListTileState extends State<MyListTile> {
  bool pressed = false;

  void _onTap() {
    if (widget.onTap != null) widget.onTap();
  }

  @override
  Widget build(BuildContext context) {
    final _titleStyle = TextStyle(
      fontSize: 16,
      color: CupertinoColors.label.resolveFrom(context),
    );
    final leftPart = Flexible(child: Row(
      children: [
        if (widget.leading != null) Container(
          padding: EdgeInsets.only(right: 16),
          width: 40,
          height: 24,
          child: widget.leading,
        ),
        DefaultTextStyle(
          child: widget.title,
          style: _titleStyle,
        ),
      ],
    ));
    final _labelStyle = TextStyle(
      fontSize: 16,
      color: CupertinoColors.secondaryLabel.resolveFrom(context),
    );
    final rightPart = Row(
      children: [
        if (widget.trailing != null) DefaultTextStyle(
          child: widget.trailing,
          style: _labelStyle,
        ),
        if (widget.trailingChevron) Icon(
          CupertinoIcons.chevron_forward,
          color: CupertinoColors.tertiaryLabel.resolveFrom(context),
        ),
      ],
    );
    return GestureDetector(
      onTapDown: (_) { setState(() { pressed = true; }); },
      onTapUp: (_) { setState(() { pressed = false; }); },
      onTapCancel: () { setState(() { pressed = false; }); },
      onTap: _onTap,
      child: Column(children: [
        Container(
          color: (pressed && widget.onTap != null)
            ? CupertinoColors.systemGrey4.resolveFrom(context) 
            : widget.background.resolveFrom(context),
          padding: EdgeInsets.symmetric(horizontal: 16, vertical: 6),
          constraints: BoxConstraints(minHeight: 48),
          child: Row(
            crossAxisAlignment: CrossAxisAlignment.center,
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            children: [
              leftPart,
              rightPart,
            ],
          ),
        ),
        if (widget.withDivider) Padding(
          padding: EdgeInsets.only(left: widget.leading == null ? 16 : 50),
          child: Divider(color: CupertinoColors.systemGrey4.resolveFrom(context), height: 0),
        ),
      ],),
    );
  }
}

A  => lib/components/responsive_action_sheet.dart +22 -0
@@ 1,22 @@
import 'package:fluent_reader_lite/utils/global.dart';
import 'package:flutter/cupertino.dart';

class ResponsiveActionSheet extends StatelessWidget {
  final Widget child;

  ResponsiveActionSheet(this.child);

  @override
  Widget build(BuildContext context) {
    if (!Global.isTablet) return child;
    return Row(
      mainAxisAlignment: MainAxisAlignment.start,
      children: [
        Container(
          constraints: BoxConstraints(maxWidth: 320),
          child: child,
        )
      ],
    );
  }
}

A  => lib/components/subscription_item.dart +129 -0
@@ 1,129 @@
import 'package:fluent_reader_lite/components/dismissible_background.dart';
import 'package:fluent_reader_lite/components/favicon.dart';
import 'package:fluent_reader_lite/components/mark_all_action_sheet.dart';
import 'package:fluent_reader_lite/components/time_text.dart';
import 'package:fluent_reader_lite/models/source.dart';
import 'package:fluent_reader_lite/utils/global.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

import 'badge.dart';

class SubscriptionItem extends StatefulWidget {
  final RSSSource source;

  SubscriptionItem(this.source, {Key key}) : super(key: key);

  @override
  _SubscriptionItemState createState() => _SubscriptionItemState();
}

class _SubscriptionItemState extends State<SubscriptionItem> {
  bool pressed = false;

  void _openSourcePage() async {
    await Global.feedsModel.initSourcesFeed([widget.source.id]);
    Navigator.of(context).pushNamed("/feed", arguments: widget.source.name);
  }

  static const _dismissThresholds = {
    DismissDirection.horizontal: 0.25,
  };

  Future<bool> _onDismiss(DismissDirection direction) async {
    HapticFeedback.mediumImpact();
    if (direction == DismissDirection.startToEnd) {
      showCupertinoModalPopup(
        context: context,
        builder: (context) => MarkAllActionSheet({widget.source.id}),
      );
    } else {
      Navigator.of(context, rootNavigator: true).pushNamed(
        "/settings/sources/edit",
        arguments: widget.source.id,
      );
    }
    return false;
  }

  @override
  Widget build(BuildContext context) {
    final _titleStyle = TextStyle(
      fontSize: 16,
      color: CupertinoColors.label.resolveFrom(context),
      fontWeight: FontWeight.bold,
    );
    final _descStyle = TextStyle(
      fontSize: 16,
      color: CupertinoColors.secondaryLabel.resolveFrom(context),
    );
    final _timeStyle = TextStyle(
      fontSize: 14,
      color: CupertinoColors.secondaryLabel.resolveFrom(context),
    );
    final topLine = Row(
      mainAxisAlignment: MainAxisAlignment.spaceBetween,
      children: [
        Expanded(
          child: Row(children: [
            Padding(
              padding: EdgeInsets.only(right: 8),
              child: Favicon(widget.source),
            ),
            Expanded(
              child: Text(widget.source.name, style: _titleStyle, overflow: TextOverflow.ellipsis,),
            ),
          ]),
        ),
        TimeText(widget.source.latest, style: _timeStyle),
      ],
    );
    final bottomLine = Row(
      mainAxisAlignment: MainAxisAlignment.spaceBetween,
      children: [
        Expanded(
          child: Text(widget.source.lastTitle, style: _descStyle, overflow: TextOverflow.ellipsis),
        ),
        if (widget.source.unreadCount > 0) Badge(widget.source.unreadCount),
      ],
    );
    final body = GestureDetector(
      onTapDown: (_) { setState(() { pressed = true; }); },
      onTapUp: (_) { setState(() { pressed = false; }); },
      onTapCancel: () { setState(() { pressed = false; }); },
      onTap: _openSourcePage,
      child: Column(children: [
        Container(
          constraints: BoxConstraints(minHeight: 64),
          color: pressed 
            ? CupertinoColors.systemGrey4.resolveFrom(context) 
            : CupertinoColors.systemBackground.resolveFrom(context),
          child: Padding(
            padding: EdgeInsets.symmetric(horizontal: 16, vertical: 8),
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                topLine,
                Padding(padding: EdgeInsets.only(top: 4)),
                bottomLine
              ],
            ),
          ),
        ),
        Padding(
          padding: EdgeInsets.only(left: 16),
          child: Divider(color: CupertinoColors.systemGrey4.resolveFrom(context), height: 1),
        ),
      ],),
    );
    return Dismissible(
      key: Key("D-${widget.source.id}"),
      background: DismissibleBackground(CupertinoIcons.checkmark_circle, true),
      secondaryBackground: DismissibleBackground(CupertinoIcons.pencil_circle, false),
      dismissThresholds: _dismissThresholds,
      confirmDismiss: _onDismiss,
      child: body,
    );
  }
}
\ No newline at end of file

A  => lib/components/sync_control.dart +30 -0
@@ 1,30 @@
import 'dart:async';

import 'package:fluent_reader_lite/utils/global.dart';
import 'package:flutter/cupertino.dart';

class SyncControl extends StatefulWidget {
  @override
  _SyncControlState createState() => _SyncControlState();
}

class _SyncControlState extends State<SyncControl> {
  Future<void> _onRefresh() {
    var completer = Completer();
    Function listener;
    listener = () {
      completer.complete();
      Global.syncModel.removeListener(listener);
    };
    Global.syncModel.addListener(listener);
    Global.syncModel.syncWithService();
    return completer.future;
  }

  @override
  Widget build(BuildContext context) {
    return CupertinoSliverRefreshControl(
      onRefresh: _onRefresh,
    );
  }
}

A  => lib/components/time_text.dart +75 -0
@@ 1,75 @@
import 'dart:async';

import 'package:flutter/cupertino.dart';

class TimeText extends StatefulWidget {
  final DateTime date;
  final TextStyle style;

  TimeText(this.date, {this.style, Key key}) : super(key: key);

  @override
  _TimeTextState createState() => _TimeTextState();
}

class _TimeTextState extends State<TimeText> {
  Timer _timer;
  Duration _duration;

  int diffMinutes() {
    final now = DateTime.now();
    return now.difference(widget.date).inMinutes;
  }

  @override
  void initState() {
    super.initState();
    updateTimer();
  }

  void updateTimer() {
    final diff = diffMinutes();
    Duration duration;
    if (diff < 60) {
      duration = Duration(minutes: 1);
    } else if (diff < 60 * 24) {
      duration = Duration(minutes: 60 - diff % 60);
    } else {
      duration = Duration(minutes: (60 * 24) - diff % (60 * 24));
    }
    if (_duration == null || duration.compareTo(_duration) != 0) {
      _duration = duration;
      if (_timer != null) _timer.cancel();
      _timer = Timer.periodic(duration, (_) {
        setState(() {});
        updateTimer();
      });
    }
  }

  @override
  void dispose() {
    if (_timer != null) _timer.cancel();
    super.dispose();
  }

  @override
  void didUpdateWidget(covariant TimeText oldWidget) {
    if (oldWidget.date.compareTo(widget.date) != 0) updateTimer();
    super.didUpdateWidget(oldWidget);
  }

  @override
  Widget build(BuildContext context) {
    final diff = diffMinutes();
    String label;
    if (diff < 60) {
      label = "${diff}m";
    } else if (diff < 60 * 24) {
      label = "${diff ~/ 60}h";
    } else {
      label = "${diff ~/ (60 * 24)}d";
    }
    return Text(label, style: widget.style);
  }
}

A  => lib/l10n/intl_en.arb +80 -0
@@ 1,80 @@
{
    "allArticles": "All Articles",
    "allSubscriptions": "All subscriptions",
    "filter": "Filter",
    "feed": "Feed",
    "subscriptions": "Subscriptions",
    "groups": "Groups",
    "settings": "Settings",
    "service": "Service",
    "preferences": "Preferences",
    "about": "About",
    "theme": "Theme",
    "followSystem": "Follow system",
    "light": "Light mode",
    "dark": "Dark mode",
    "language": "Language",
    "markRead": "Mark as read",
    "markUnread": "Mark as unread",
    "markAll": "Mark all as read",
    "markAbove": "Mark above as read",
    "markBelow": "Mark below as read",
    "daysAgo": "{days,plural, =1{Over 1 day ago}other{Over {days} days ago}}",
    "star": "Star",
    "unstar": "Unstar",
    "share": "Share",
    "cancel": "Cancel",
    "close": "Close",
    "save": "Save",
    "reading": "Reading",
    "account": "Account",
    "app": "App",
    "general": "General",
    "version": "Version",
    "openSource": "Open source project",
    "feedback": "Feedback",
    "showThumb": "Show thumbnail",
    "showSnippet": "Show snippet",
    "dimRead": "Dim read articles",
    "gestures": "Gestures",
    "swipeLeft": "Swipe left",
    "swipeRight": "Swipe right",
    "toggleRead": "Toggle read",
    "toggleStar": "Toggle star",
    "openMenu": "Open menu",
    "openExternal": "Open externally",
    "fontSize": "Font size",
    "edit": "Edit",
    "name": "Name",
    "icon": "Icon",
    "openTarget": "Default open target",
    "rssText": "RSS full text",
    "loadWebpage": "Load webpage",
    "loadFull": "Load full content",
    "invalidValue": "Invalid value",
    "unreadOnly": "Unread only",
    "starredOnly": "Starred only",
    "search": "Search",
    "editKeyword": "Edit keyword",
    "clearSearch": "Clear search",
    "storage": "Storage",
    "clearCache": "Clear cache",
    "autoDelete": "Auto delete items",
    "sync": "Sync",
    "onStart": "On start",
    "lastSyncSuccess": "Last sync successful at",
    "lastSyncFailure": "Last sync failed at",
    "welcome": "Welcome",
    "credentials": "Credentials",
    "endpoint": "Endpoint",
    "username": "Username",
    "password": "Password",
    "fetchLimit": "Fetch limit",
    "enter": "Required",
    "entered": "Entered",
    "serviceFailure": "Cannot connect to service",
    "serviceFailureHint": "Please check the service configuration or network status.",
    "logOut": "Log out",
    "logOutWarning": "All local data will be deleted. Are you sure?",
    "confirm": "Confirm"
  }
\ No newline at end of file

A  => lib/l10n/intl_zh.arb +80 -0
@@ 1,80 @@
{
    "allArticles": "全部文章",
    "allSubscriptions": "全部订阅源",
    "filter": "筛选",
    "feed": "信息流",
    "subscriptions": "订阅源",
    "groups": "分组",
    "settings": "设置",
    "service": "服务",
    "preferences": "偏好",
    "about": "关于",
    "theme": "主题",
    "followSystem": "跟随系统",
    "light": "浅色模式",
    "dark": "深色模式",
    "language": "语言",
    "markRead": "标为已读",
    "markUnread": "标为未读",
    "markAll": "全部标为已读",
    "markAbove": "将以上标为已读",
    "markBelow": "将以下标为已读",
    "daysAgo": "超过 {days} 天前",
    "star": "标为星标",
    "unstar": "取消星标",
    "share": "分享",
    "cancel": "取消",
    "close": "关闭",
    "save": "保存",
    "reading": "阅读",
    "account": "账户",
    "app": "应用",
    "general": "通用",
    "version": "版本",
    "openSource": "开源项目",
    "feedback": "反馈",
    "showThumb": "显示缩略图",
    "showSnippet": "显示摘要",
    "dimRead": "淡化已读文章",
    "gestures": "手势",
    "swipeLeft": "向左滑动",
    "swipeRight": "向右滑动",
    "toggleRead": "切换已读",
    "toggleStar": "切换星标",
    "openMenu": "打开菜单",
    "openExternal": "在外部打开",
    "fontSize": "字体大小",
    "edit": "编辑",
    "name": "名称",
    "icon": "图标",
    "openTarget": "默认打开方式",
    "rssText": "RSS 全文",
    "loadWebpage": "加载网页",
    "loadFull": "抓取全文",
    "invalidValue": "请输入合法的值",
    "unreadOnly": "仅未读文章",
    "starredOnly": "仅星标文章",
    "search": "搜索",
    "editKeyword": "编辑关键词",
    "clearSearch": "取消搜索",
    "storage": "存储",
    "clearCache": "清理缓存",
    "autoDelete": "自动删除文章",
    "sync": "同步",
    "onStart": "打开应用时",
    "lastSyncSuccess": "最后一次同步成功于",
    "lastSyncFailure": "最后一次同步失败于",
    "welcome": "欢迎",
    "credentials": "凭证",
    "endpoint": "端点",
    "username": "用户名",
    "password": "密码",
    "fetchLimit": "同步数量",
    "enter": "请输入",
    "entered": "已填写",
    "serviceFailure": "连接到服务时出错",
    "serviceFailureHint": "请检查服务配置或网络连接",
    "logOut": "登出",
    "logOutWarning": "这将移除所有本地数据,是否继续?",
    "confirm": "确定"
  }
\ No newline at end of file

A  => lib/main.dart +123 -0
@@ 1,123 @@
import 'dart:io';

import 'package:fluent_reader_lite/models/service.dart';
import 'package:fluent_reader_lite/pages/article_page.dart';
import 'package:fluent_reader_lite/pages/settings/about_page.dart';
import 'package:fluent_reader_lite/pages/home_page.dart';
import 'package:fluent_reader_lite/pages/settings/feed_page.dart';
import 'package:fluent_reader_lite/pages/settings/general_page.dart';
import 'package:fluent_reader_lite/pages/settings/reading_page.dart';
import 'package:fluent_reader_lite/pages/settings/services/fever_page.dart';
import 'package:fluent_reader_lite/pages/settings/source_edit_page.dart';
import 'package:fluent_reader_lite/pages/settings/sources_page.dart';
import 'package:fluent_reader_lite/pages/settings_page.dart';
import 'package:fluent_reader_lite/utils/global.dart';
import 'package:fluent_reader_lite/utils/store.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:modal_bottom_sheet/modal_bottom_sheet.dart';
import 'package:path/path.dart';
import 'package:provider/provider.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'generated/l10n.dart';
import 'models/global_model.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  Store.sp = await SharedPreferences.getInstance();
  Global.init();
  if (Platform.isAndroid) {
    SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
      statusBarColor: Colors.transparent,
    ));
  }
  runApp(MyApp());
  SystemChannels.lifecycle.setMessageHandler((msg) {
    if (msg == AppLifecycleState.resumed.toString()) {
      if (Global.globalModel.syncOnStart
        && DateTime.now().difference(Global.syncModel.lastSynced).inMinutes >= 10)
      Global.syncModel.syncWithService();
    }
    return null;
  });
}

class MyApp extends StatelessWidget {
  static final Map<String, Widget Function(BuildContext)> baseRoutes = {
    "/article": (context) => ArticlePage(),
    "/settings": (context) => SettingsPage(),
    "/settings/sources": (context) => SourcesPage(),
    "/settings/sources/edit": (context) => SourceEditPage(),
    "/settings/feed": (context) => FeedPage(),
    "/settings/reading": (context) => ReadingPage(),
    "/settings/general": (context) => GeneralPage(),
    "/settings/about": (context) => AboutPage(),
    "/settings/service/fever": (context) => FeverPage(),
    "/settings/service": (context) {
      var serviceType = SyncService.values[Store.sp.getInt(StoreKeys.SYNC_SERVICE) ?? 0];
      switch (serviceType) {
        case SyncService.None:
          break;
        case SyncService.Fever:
          return FeverPage();
        case SyncService.Feedbin:
          // TODO: Handle this case.
          break;
        case SyncService.GReader:
          // TODO: Handle this case.
          break;
        case SyncService.Inoreader:
          // TODO: Handle this case.
          break;
      }
      return AboutPage();
    }
  };
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MultiProvider(
      providers: [
        ChangeNotifierProvider.value(value: Global.globalModel),
        ChangeNotifierProvider.value(value: Global.sourcesModel),
        ChangeNotifierProvider.value(value: Global.itemsModel),
        ChangeNotifierProvider.value(value: Global.feedsModel),
        ChangeNotifierProvider.value(value: Global.groupsModel),
        ChangeNotifierProvider.value(value: Global.syncModel),
      ],
      child: Consumer<GlobalModel>(
        builder: (context, globalModel, child) => CupertinoApp(
          title: "Fluent Reader",
          localizationsDelegates: [
            // ... app-specific localization delegate[s] here
            S.delegate,
            GlobalMaterialLocalizations.delegate,
            GlobalWidgetsLocalizations.delegate,
            GlobalCupertinoLocalizations.delegate,
          ],
          locale: globalModel.locale,
          supportedLocales: [
            const Locale("en"),
            const Locale("zh"),
          ],
          localeResolutionCallback: (_locale, supportedLocales) {
            _locale = Locale(_locale.languageCode);
            if (globalModel.locale != null) return globalModel.locale;
            else if (supportedLocales.contains(_locale)) return _locale;
            else return Locale("en");
          },
          theme: CupertinoThemeData(
            primaryColor: CupertinoColors.systemBlue,
            brightness: globalModel.getBrightness(),
          ),
          routes: {
            "/": (context) => CupertinoScaffold(body: HomePage()),
            ...baseRoutes,
          },
        ),
      ),
    );
  }
}

A  => lib/models/feed.dart +121 -0
@@ 1,121 @@
import 'package:fluent_reader_lite/utils/global.dart';
import 'package:fluent_reader_lite/utils/store.dart';
import 'package:tuple/tuple.dart';

import 'item.dart';

enum FilterType {
  All, Unread, Starred
}

const _LOAD_LIMIT = 50;

class RSSFeed {
  bool initialized = false;
  bool loading = false;
  bool allLoaded = false;
  Set<String> sids;
  List<String> iids = [];
  FilterType filterType;
  String search = "";

  RSSFeed({this.sids}) {
    if (sids == null) sids = Set();
    filterType = FilterType.values[Store.sp.getInt(_filterKey) ?? 0];
  }

  String get _filterKey => sids.length == 0
    ? StoreKeys.FEED_FILTER_ALL
    : StoreKeys.FEED_FILTER_SOURCE;

  Tuple2<String, List<String>> _getPredicates() {
    List<String> where = ["TRUE"];
    List<String> whereArgs = [];
    if (sids.length > 0) {
      var placeholders = List.filled(sids.length, "?").join(" , ");
      where.add("source IN ($placeholders)");
      whereArgs.addAll(sids);
    }
    if (filterType == FilterType.Unread) {
      where.add("hasRead = 0");
    } else if (filterType == FilterType.Starred) {
      where.add("starred = 1");
    }
    if (search != "") {
      where.add("(UPPER(title) LIKE ? OR UPPER(snippet) LIKE ?)");
      var keyword = "%$search%".toUpperCase();
      whereArgs.add(keyword);
      whereArgs.add(keyword);
    }
    return Tuple2(where.join(" AND "), whereArgs);
  }

  bool testItem(RSSItem item) {
    if (sids.length > 0 && !sids.contains(item.source)) return false;
    if (filterType == FilterType.Unread && item.hasRead) return false;
    if (filterType == FilterType.Starred && !item.starred) return false;
    if (search != "") {
      var keyword = search.toUpperCase();
      if (item.title.toUpperCase().contains(keyword)) return true;
      if (item.snippet.toUpperCase().contains(keyword)) return true;
      return false;
    }
    return true;
  }

  Future<void> init() async {
    if (loading) return;
    loading = true;
    var predicates = _getPredicates();
    var items = (await Global.db.query(
      "items",
      orderBy: "date DESC",
      limit: _LOAD_LIMIT,
      where: predicates.item1,
      whereArgs: predicates.item2,
    )).map((m) => RSSItem.fromMap(m)).toList();
    allLoaded = items.length < _LOAD_LIMIT;
    Global.itemsModel.loadItems(items);
    iids = items.map((i) => i.id).toList();
    loading = false;
    initialized = true;
    Global.feedsModel.broadcast();
  }

  Future<void> loadMore() async {
    if (loading || allLoaded) return;
    loading = true;
    var predicates = _getPredicates();
    var offset = iids
      .map((iid) => Global.itemsModel.getItem(iid))
      .fold(0, (c, i) => c + (testItem(i) ? 1 : 0));
    var items = (await Global.db.query(
      "items",
      orderBy: "date DESC",
      limit: _LOAD_LIMIT,
      offset: offset,
      where: predicates.item1,
      whereArgs: predicates.item2,
    )).map((m) => RSSItem.fromMap(m)).toList();
    if (items.length < _LOAD_LIMIT) {
      allLoaded = true;
    }
    Global.itemsModel.loadItems(items);
    iids.addAll(items.map((i) => i.id));
    loading = false;
    Global.feedsModel.broadcast();
  }

  Future<void> setFilter(FilterType filter) async {
    if (filterType == filter && filter == FilterType.All) return;
    filterType = filter;
    Store.sp.setInt(_filterKey, filter.index);
    await init();
  }

  Future<void> performSearch(String keyword) async {
    if (search == keyword) return;
    search = keyword;
    await init();
  }
}

A  => lib/models/feeds_model.dart +89 -0
@@ 1,89 @@
import 'package:fluent_reader_lite/models/feed.dart';
import 'package:fluent_reader_lite/utils/global.dart';
import 'package:fluent_reader_lite/utils/store.dart';
import 'package:fluent_reader_lite/utils/utils.dart';
import 'package:flutter/cupertino.dart';

import 'item.dart';

enum ItemSwipeOption {
  ToggleRead, ToggleStar, Share, OpenMenu, OpenExternal,
}

class FeedsModel with ChangeNotifier {
  RSSFeed all = RSSFeed();
  RSSFeed source;

  bool _showThumb = Store.sp.getBool(StoreKeys.SHOW_THUMB) ?? true;
  bool get showThumb => _showThumb;
  set showThumb(bool value) {
    _showThumb = value;
    Store.sp.setBool(StoreKeys.SHOW_THUMB, value);
    notifyListeners();
  }

  bool _showSnippet = Store.sp.getBool(StoreKeys.SHOW_SNIPPET) ?? true;
  bool get showSnippet => _showSnippet;
  set showSnippet(bool value) {
    _showSnippet = value;
    Store.sp.setBool(StoreKeys.SHOW_SNIPPET, value);
    notifyListeners();
  }

  bool _dimRead = Store.sp.getBool(StoreKeys.DIM_READ) ?? false;
  bool get dimRead => _dimRead;
  set dimRead(bool value) {
    _dimRead = value;
    Store.sp.setBool(StoreKeys.DIM_READ, value);
    notifyListeners();
  }

  ItemSwipeOption _swipeR = ItemSwipeOption.values[Store.sp.getInt(StoreKeys.FEED_SWIPE_R) ?? 0];
  ItemSwipeOption get swipeR => _swipeR;
  set swipeR(ItemSwipeOption value) {
    _swipeR = value;
    Store.sp.setInt(StoreKeys.FEED_SWIPE_R, value.index);
    notifyListeners();
  }

  ItemSwipeOption _swipeL = ItemSwipeOption.values[Store.sp.getInt(StoreKeys.FEED_SWIPE_L) ?? 1];
  ItemSwipeOption get swipeL => _swipeL;
  set swipeL(ItemSwipeOption value) {
    _swipeL = value;
    Store.sp.setInt(StoreKeys.FEED_SWIPE_L, value.index);
    notifyListeners();
  }

  void broadcast() { notifyListeners(); }

  Future<void> initSourcesFeed(Iterable<String> sids) async {
    Set<String> sidSet = Set.from(sids);
    source = RSSFeed(sids: sidSet);
    await source.init();
  }

  void addFetchedItems(Iterable<RSSItem> items) {
    for (var feed in [all, source]) {
      if (feed == null) continue;
      var lastDate = feed.iids.length > 0
        ? Global.itemsModel.getItem(feed.iids.last).date
        : null;
      for (var item in items) {
        if (!feed.testItem(item)) continue;
        if (lastDate != null && item.date.isBefore(lastDate)) continue;
        var idx = Utils.binarySearch(feed.iids, item.id, (a, b) {
          return Global.itemsModel.getItem(b).date.compareTo(Global.itemsModel.getItem(a).date);
        });
        feed.iids.insert(idx, item.id);
      }
    }
    notifyListeners();
  }

  void initAll() {
    for (var feed in [all, source]) {
      if (feed == null) continue;
      feed.init();
    }
  }
}
\ No newline at end of file

A  => lib/models/global_model.dart +47 -0
@@ 1,47 @@
import 'package:fluent_reader_lite/utils/store.dart';
import 'package:flutter/material.dart';

enum ThemeSetting {
  Default, Light, Dark
}

class GlobalModel with ChangeNotifier {
  ThemeSetting _theme = Store.getTheme();
  Locale _locale = Store.getLocale();
  int _keepItemsDays = Store.sp.getInt(StoreKeys.KEEP_ITEMS_DAYS) ?? 21;
  bool _syncOnStart = Store.sp.getBool(StoreKeys.SYNC_ON_START) ?? true;

  ThemeSetting get theme => _theme;
  set theme(ThemeSetting value) {
    if (value != _theme) {
      _theme = value;
      notifyListeners();
      Store.setTheme(value);
    }
  }
  Brightness getBrightness() {
    if (_theme == ThemeSetting.Default) return null;
    else return _theme == ThemeSetting.Light ? Brightness.light : Brightness.dark;
  }

  Locale get locale => _locale;
  set locale(Locale value) {
    if (value != _locale) {
      _locale = value;
      notifyListeners();
      Store.setLocale(value);
    }
  }

  int get keepItemsDays => _keepItemsDays;
  set keepItemsDays(int value) {
    _keepItemsDays = value;
    Store.sp.setInt(StoreKeys.KEEP_ITEMS_DAYS, value);
  }

  bool get syncOnStart => _syncOnStart;
  set syncOnStart(bool value) {
    _syncOnStart = value;
    Store.sp.setBool(StoreKeys.SYNC_ON_START, value);
  }
}
\ No newline at end of file

A  => lib/models/groups_model.dart +13 -0
@@ 1,13 @@
import 'package:fluent_reader_lite/utils/store.dart';
import 'package:flutter/cupertino.dart';

class GroupsModel with ChangeNotifier {
  Map<String, List<String>> _groups = Store.getGroups();

  Map<String, List<String>> get groups => _groups;
  set groups(Map<String, List<String>> groups) {
    _groups = groups;
    notifyListeners();
    Store.setGroups(groups);
  }
}
\ No newline at end of file

A  => lib/models/item.dart +57 -0
@@ 1,57 @@
class RSSItem {
  String id;
  String source;
  String title;
  String link;
  DateTime date;
  String content;
  String snippet;
  bool hasRead;
  bool starred;
  String creator; // Optional
  String thumb; // Optional

  RSSItem({
    this.id, this.source, this.title, this.link, this.date,
    this.content, this.snippet, this.hasRead, this.starred,
    this.creator, this.thumb
  });

  RSSItem clone() {
    return RSSItem(
      id: id, source: source, title: title, link: link, date: date,
      content: content, snippet: snippet, hasRead: hasRead, starred: starred,
      creator: creator, thumb: thumb,
    );
  }

  Map<String, dynamic> toMap() {
    return {
      "iid": id,
      "source": source,
      "title": title,
      "link": link,
      "date": date.millisecondsSinceEpoch,
      "content": content,
      "snippet": snippet,
      "hasRead": hasRead ? 1 : 0,
      "starred": starred ? 1 : 0,
      "creator": creator,
      "thumb": thumb,
    };
  }

  RSSItem.fromMap(Map<String, dynamic> map) {
    id = map["iid"];
    source = map["source"];
    title = map["title"];
    link = map["link"];
    date = DateTime.fromMillisecondsSinceEpoch(map["date"]);
    content = map["content"];
    snippet = map["snippet"];
    hasRead = map["hasRead"] != 0;
    starred = map["starred"] != 0;
    creator = map["creator"];
    thumb = map["thumb"];
  }
}

A  => lib/models/items_model.dart +124 -0
@@ 1,124 @@
import 'package:fluent_reader_lite/models/item.dart';
import 'package:fluent_reader_lite/utils/global.dart';
import 'package:flutter/cupertino.dart';
import 'package:sqflite/sqflite.dart';

class ItemsModel with ChangeNotifier {
  Map<String, RSSItem> _items = Map();

  bool has(String id) => _items.containsKey(id);

  RSSItem getItem(String id) => _items[id];
  Iterable<RSSItem> getItems() => _items.values;

  void loadItems(Iterable<RSSItem> items) {
    for (var item in items) {
      _items[item.id] = item;
    }
  }

  Future<void> updateItem(String iid, 
    {Batch batch, bool read, bool starred, local: false}) async {
    Map<String, dynamic> updateMap = Map();
    if (_items.containsKey(iid)) {
      final item = _items[iid].clone();
      if (read != null) {
        item.hasRead = read;
        if (!local) {
          if (read) Global.service.markRead(item);
          else Global.service.markUnead(item);
        }
        Global.sourcesModel.updateUnreadCount(item.source, read ? -1 : 1);
      }
      if (starred != null) {
        item.starred = starred;
        if (!local) {
          if (starred) Global.service.star(item);
          else Global.service.unstar(item);
        }
      }
      _items[iid] = item;
    }
    if (read != null) updateMap["hasRead"] = read ? 1 : 0;
    if (starred != null) updateMap["starred"] = starred ? 1 : 0;
    if (batch != null) {
      batch.update("items", updateMap, where: "iid = ?", whereArgs: [iid]);
    } else {
      notifyListeners();
      await Global.db.update("items", updateMap, where: "iid = ?", whereArgs: [iid]);
    }
  }

  Future<void> markAllRead(Set<String> sids, {DateTime date, before = true}) async {
    Global.service.markAllRead(sids, date, before);
    List<String> predicates = [];
    if (sids.length > 0) {
      predicates.add("source IN (${List.filled(sids.length, "?").join(" , ")})");
    }
    if (date != null) {
      predicates.add("date ${before ? "<=" : ">="} ${date.millisecondsSinceEpoch}");
    }
    await Global.db.update(
      "items",
      { "hasRead": 1 },
      where: predicates.join(" AND "),
      whereArgs: sids.toList(),
    );
    for (var item in _items.values.toList()) {
      if (sids.length > 0 && !sids.contains(item.source)) continue;
      if (date != null && 
        (before ? item.date.compareTo(date) > 0 : item.date.compareTo(date) < 0))
        continue;
      item.hasRead = true;
    }
    notifyListeners();
    Global.sourcesModel.updateUnreadCounts();
  }

  Future<void> fetchItems() async {
    final items = await Global.service.fetchItems();
    final batch = Global.db.batch();
    for (var item in items) {
      _items[item.id] = item;
      batch.insert(
        "items",
        item.toMap(),
        conflictAlgorithm: ConflictAlgorithm.replace,
      );
    }
    await batch.commit(noResult: true);
    // notifyListeners();
    Global.sourcesModel.updateWithFetchedItems(items);
    Global.feedsModel.addFetchedItems(items);
  }

  Future<void> syncItems() async {
    final tuple = await Global.service.syncItems();
    final unreadIds = tuple.item1;
    final starredIds = tuple.item2;
    final rows = await Global.db.query(
      "items",
      columns: ["iid", "hasRead", "starred"],
      where: "hasRead = 0 OR starred = 1",
    );
    final batch = Global.db.batch();
    for (var row in rows) {
      final id = row["iid"];
      if (row["hasRead"] == 0 && !unreadIds.remove(id)) {
        await updateItem(id, read: true, batch: batch, local: true);
      }
      if (row["starred"] == 1 && !starredIds.remove(id)) {
        await updateItem(id, starred: false, batch: batch, local: true);
      }
    }
    for (var unread in unreadIds) {
      await updateItem(unread, read: false, batch: batch, local: true);
    }
    for (var starred in starredIds) {
      await updateItem(starred, starred: true, batch: batch, local: true);
    }
    notifyListeners();
    await batch.commit(noResult: true);
    await Global.sourcesModel.updateUnreadCounts();
  }
}

A  => lib/models/service.dart +20 -0
@@ 1,20 @@
import 'package:fluent_reader_lite/models/item.dart';
import 'package:fluent_reader_lite/models/source.dart';
import 'package:tuple/tuple.dart';

enum SyncService {
  None, Fever, Feedbin, GReader, Inoreader
}

abstract class ServiceHandler {
  void remove();
  Future<bool> validate();
  Future<Tuple2<List<RSSSource>, Map<String, List<String>>>> getSources();
  Future<List<RSSItem>> fetchItems();
  Future<Tuple2<Set<String>, Set<String>>> syncItems();
  Future<void> markAllRead(Set<String> sids, DateTime date, bool before);
  Future<void> markRead(RSSItem item);
  Future<void> markUnead(RSSItem item);
  Future<void> star(RSSItem item);
  Future<void> unstar(RSSItem item);
}

A  => lib/models/services/fever.dart +233 -0
@@ 1,233 @@
import 'dart:convert';
import 'dart:math';

import 'package:fluent_reader_lite/models/item.dart';
import 'package:fluent_reader_lite/utils/global.dart';
import 'package:fluent_reader_lite/utils/store.dart';
import 'package:html/parser.dart';
import 'package:http/http.dart' as http;
import 'package:fluent_reader_lite/models/source.dart';
import 'package:tuple/tuple.dart';

import '../service.dart';

class FeverServiceHandler extends ServiceHandler {
  String endpoint;
  String apiKey;
  int _lastId;
  int fetchLimit;
  bool _useInt32;

  FeverServiceHandler() {
    endpoint = Store.sp.getString(StoreKeys.ENDPOINT);
    apiKey = Store.sp.getString(StoreKeys.API_KEY);
    _lastId = Store.sp.getInt(StoreKeys.LAST_ID) ?? 0;
    fetchLimit = Store.sp.getInt(StoreKeys.FETCH_LIMIT);
    _useInt32 = Store.sp.getBool(StoreKeys.FEVER_INT_32) ?? false;
  }

  FeverServiceHandler.fromValues(
    this.endpoint,
    this.apiKey,
    this.fetchLimit,
  ) {
    _lastId = Store.sp.getInt(StoreKeys.LAST_ID) ?? 0;
    _useInt32 = Store.sp.getBool(StoreKeys.FEVER_INT_32) ?? false;
  }

  void persist(String username, String password) {
    Store.sp.setInt(StoreKeys.SYNC_SERVICE, SyncService.Fever.index);
    Store.sp.setString(StoreKeys.ENDPOINT, endpoint);
    Store.sp.setString(StoreKeys.USERNAME, username);
    Store.sp.setString(StoreKeys.PASSWORD, password);
    Store.sp.setString(StoreKeys.API_KEY, apiKey);
    Store.sp.setInt(StoreKeys.FETCH_LIMIT, fetchLimit);
    Store.sp.setInt(StoreKeys.LAST_ID, _lastId);
    Store.sp.setBool(StoreKeys.FEVER_INT_32, _useInt32);
    Global.service = this;
  }

  @override
  void remove() {
    Store.sp.remove(StoreKeys.SYNC_SERVICE);
    Store.sp.remove(StoreKeys.ENDPOINT);
    Store.sp.remove(StoreKeys.USERNAME);
    Store.sp.remove(StoreKeys.PASSWORD);
    Store.sp.remove(StoreKeys.API_KEY);
    Store.sp.remove(StoreKeys.FETCH_LIMIT);
    Store.sp.remove(StoreKeys.LAST_ID);
    Store.sp.remove(StoreKeys.FEVER_INT_32);
    Global.service = null;
  }

  Future<Map<String, dynamic>> _fetchAPI({params: "", postparams: ""}) async {
    final response = await http.post(
      endpoint + "?api" + params,
      headers: { "content-type": "application/x-www-form-urlencoded" },
      body: "api_key=$apiKey$postparams",
    );
    return jsonDecode(response.body);
  }

  int get lastId => _lastId;
  set lastId(int value) {
    _lastId = value;
    Store.sp.setInt(StoreKeys.LAST_ID, value);
  }

  bool get useInt32 => _useInt32;
  set useInt32(bool value) {
    _useInt32 = value;
    Store.sp.setBool(StoreKeys.FEVER_INT_32, value);
  }
  
  @override
  Future<bool> validate() async {
    try {
      return (await _fetchAPI())["auth"] == 1;
    } catch(exp) {
      return false;
    }
  }

  @override
  Future<Tuple2<List<RSSSource>, Map<String, List<String>>>> getSources() async {
    var response = await _fetchAPI(params: "&feeds");
    var sources = response["feeds"].map<RSSSource>((f) {
      return RSSSource(f["id"].toString(), f["url"], f["title"]);
    }).toList();
    var feedGroups = response["feeds_groups"];
    var groupsMap = Map<String, List<String>>();
    var groups = (await _fetchAPI(params: "&groups"))["groups"];
    if (groups == null || feedGroups == null) throw Error();
    var groupsIdMap = Map<int, String>();
    for (var group in groups) {
        var title = group["title"].trim();
        groupsIdMap[group["id"]] = title;
    }
    for (var group in feedGroups) {
      var name = groupsIdMap[group["group_id"]];
      for (var fid in group["feed_ids"].split(",")) {
        groupsMap.putIfAbsent(name, () => []);
        groupsMap[name].add(fid);
      }
    }
    return Tuple2(sources, groupsMap);
  }

  @override
  Future<List<RSSItem>> fetchItems() async {
    var minId = useInt32 ? 2147483647 : 2^50;
    List<dynamic> response;
    List<dynamic> items = [];
    do {
      response = (await _fetchAPI(params: "&items&max_id=$minId"))["items"];
      if (response == null) throw Error();
      items.addAll(response.where((i) => i["id"] > lastId));
      if (response.length == 0 && minId == 2^50) {
        useInt32 = true;
        minId = 2147483647;
        response = null;
      } else {
        minId = response.fold(minId, (m, n) => min<int>(m, n["id"]));
      }
    } while (
      minId > lastId && 
      (response == null || response.length >= 50) && 
      items.length < fetchLimit
    );
    var parsedItems = items.map<RSSItem>((i) {
      var dom = parse(i["html"]);
      var item = RSSItem(
        id: i["id"].toString(),
        source: i["feed_id"].toString(),
        title: i["title"],
        link: i["url"],
        date: DateTime.fromMillisecondsSinceEpoch(i["created_on_time"] * 1000),
        content: i["html"],
        snippet: dom.documentElement.text.trim(),
        creator: i["author"],
        hasRead: i["is_read"] == 1,
        starred: i["is_saved"] == 1,
      );
      // Try to get the thumbnail of the item
      var img = dom.querySelector("img");
      if (img != null && img.attributes["src"] != null) { 
        var thumb = img.attributes["src"];
        if (thumb.startsWith("http")) {
          item.thumb = thumb;
        }
      } else if (useInt32) { // TTRSS Fever Plugin attachments
        var a = dom.querySelector("body>ul>li:first-child>a");
        if (a != null && a.text.endsWith(", image\/generic") && a.attributes["href"] != null)
          item.thumb = a.attributes["href"];
        }
      return item;
    });
    lastId = items.fold(lastId, (m, n) => max(m, n["id"]));
    return parsedItems.toList();
  }

  @override
  Future<Tuple2<Set<String>, Set<String>>> syncItems() async {
    final responses = await Future.wait([
      _fetchAPI(params: "&unread_item_ids"),
      _fetchAPI(params: "&saved_item_ids"),
    ]);
    final unreadIds = responses[0]["unread_item_ids"];
    final starredIds = responses[1]["saved_item_ids"];
    return Tuple2(
      Set.from(unreadIds.split(",")),
      Set.from(starredIds.split(","))
    );
  }

  Future<void> _markItem(RSSItem item, String asType) async {
    try {
      await _fetchAPI(postparams: "&mark=item&as=$asType&id=${item.id}");
    } catch(exp) {
      print(exp);
    }
  }

  @override
  Future<void> markAllRead(Set<String> sids, DateTime date, bool before) async {
    if (date != null && !before) {
      var items = Global.itemsModel.getItems().where((i) =>
        (sids.length == 0 || sids.contains(i.source)) && i.date.compareTo(date) >= 0
      );
      await Future.wait(items.map((i) => markRead(i)));
    } else {
      var timestamp = date != null ? date.millisecondsSinceEpoch : DateTime.now().millisecondsSinceEpoch;
      timestamp = timestamp ~/ 1000 + 1;
      try {
        await Future.wait(Global.sourcesModel.getSources()
          .where((s) => sids.length == 0 || sids.contains(s.id))
          .map((s) => _fetchAPI(postparams: "&mark=feed&as=read&id=${s.id}&before=$timestamp"))
        );
      } catch(exp) {
        print(exp);
      }
    }
  }

  @override
  Future<void> markRead(RSSItem item) async {
    await _markItem(item, "read");
  }

  @override
  Future<void> markUnead(RSSItem item) async {
    await _markItem(item, "unread");
  }

  @override
  Future<void> star(RSSItem item) async {
    await _markItem(item, "saved");
  }

  @override
  Future<void> unstar(RSSItem item) async {
    await _markItem(item, "unsaved");
  }
}
\ No newline at end of file

A  => lib/models/source.dart +56 -0
@@ 1,56 @@
enum SourceOpenTarget {
    Local, FullContent, Webpage, External
}

class RSSSource {
  String id;
  String url;
  String iconUrl;
  String name;
  SourceOpenTarget openTarget;
  int unreadCount;
  DateTime latest;
  String lastTitle;

  RSSSource(this.id, this.url, this.name) {
    openTarget = SourceOpenTarget.Local;
    latest = DateTime.now();
    unreadCount = 0;
    lastTitle = "";
  }

  RSSSource._privateConstructor(
    this.id, this.url, this.iconUrl, this.name, this.openTarget,
    this.unreadCount, this.latest, this.lastTitle,
  );

  RSSSource clone() {
    return RSSSource._privateConstructor(
      this.id, this.url, this.iconUrl, this.name, this.openTarget,
      this.unreadCount, this.latest, this.lastTitle,
    );
  }

  Map<String, dynamic> toMap() {
    return {
      "sid": id,
      "url": url,
      "iconUrl": iconUrl,
      "name": name,
      "openTarget": openTarget.index,
      "latest": latest.millisecondsSinceEpoch,
      "lastTitle": lastTitle,
    };
  }

  RSSSource.fromMap(Map<String, dynamic> map) {
    id = map["sid"];
    url = map["url"];
    iconUrl = map["iconUrl"];
    name = map["name"];
    openTarget = SourceOpenTarget.values[map["openTarget"]];
    latest = DateTime.fromMillisecondsSinceEpoch(map["latest"]);
    lastTitle = map["lastTitle"];
    unreadCount = 0;
  }
}

A  => lib/models/sources_model.dart +192 -0
@@ 1,192 @@
import 'package:fluent_reader_lite/models/source.dart';
import 'package:fluent_reader_lite/utils/global.dart';
import 'package:fluent_reader_lite/utils/utils.dart';
import 'package:flutter/material.dart';
import 'package:html/parser.dart';
import 'package:http/http.dart' as http;
import 'package:sqflite/sqflite.dart';

import 'item.dart';

class SourcesModel with ChangeNotifier {
  Map<String, RSSSource> _sources = Map();
  Map<String, RSSSource> _deleted = Map();

  bool has(String id) => _sources.containsKey(id);

  RSSSource getSource(String id) => _sources[id] ?? _deleted[id];

  Iterable<RSSSource> getSources() => _sources.values;

  Future<void> init() async {
    final maps = await Global.db.query("sources");
    for (var map in maps) {
      var source = RSSSource.fromMap(map);
      _sources[source.id] = source;
    }
    notifyListeners();
    await updateUnreadCounts();
  }

  Future<void> updateUnreadCounts() async {
    final rows = await Global.db.rawQuery(
      "SELECT source, COUNT(iid) FROM items WHERE hasRead=0 GROUP BY source;"
    );
    for (var source in _sources.values) {
      var cloned = source.clone();
      _sources[source.id] = cloned;
      cloned.unreadCount = 0;
    }
    for (var row in rows) {
      _sources[row["source"]].unreadCount = row["COUNT(iid)"];
    }
    notifyListeners();
  }

  void updateUnreadCount(String sid, int diff) {
    _sources[sid].unreadCount += diff;
    notifyListeners();
  }

  Future<void> updateWithFetchedItems(Iterable<RSSItem> items) async {
    Set<String> changed = Set();
    for (var item in items) {
      var source = _sources[item.source];
      if (!item.hasRead) source.unreadCount += 1;
      if (item.date.compareTo(source.latest) > 0 || source.lastTitle.length == 0) {
        source.latest = item.date;
        source.lastTitle = item.title;
        changed.add(source.id);
      }
    }
    notifyListeners();
    if (changed.length > 0) {
      var batch = Global.db.batch();
      for (var sid in changed) {
        var source = _sources[sid];
        batch.update(
          "sources",
          { 
            "latest": source.latest.millisecondsSinceEpoch, 
            "lastTitle": source.lastTitle,
          },
          where: "sid = ?",
          whereArgs: [source.id],
        );
      }
      await batch.commit();
    }
  }

  Future<void> put(RSSSource source, {force: false}) async {
    if (_deleted.containsKey(source.id) && !force) return;
    _sources[source.id] = source;
    notifyListeners();
    await Global.db.insert(
      "sources",
      source.toMap(),
      conflictAlgorithm: ConflictAlgorithm.replace,
    );
  }

  Future<void> putAll(Iterable<RSSSource> sources, {force: false}) async {
    Batch batch = Global.db.batch();
    for (var source in sources) {
      if (_deleted.containsKey(source.id) && !force) continue;
      _sources[source.id] = source;
      batch.insert(
        "sources",
        source.toMap(),
        conflictAlgorithm: ConflictAlgorithm.replace,
      );
    }
    notifyListeners();
    await batch.commit(noResult: true);
  }

  Future<void> updateSources() async {
    final tuple = await Global.service.getSources();
    final sources = tuple.item1;
    var curr = Set<String>.from(_sources.keys);
    List<RSSSource> newSources = [];
    for (var source in sources) {
      if (curr.contains(source.id)) {
        curr.remove(source.id);
      } else {
        newSources.add(source);
      }
    }
    await putAll(newSources, force: true);
    await removeSources(curr);
    Global.groupsModel.groups = tuple.item2;
    fetchFavicons();
  }

  Future<void> removeSources(Iterable<String> ids) async {
    final batch = Global.db.batch();
    for (var id in ids) {
      if (!_sources.containsKey(id)) continue;
      var source = _sources[id];
      batch.delete(
        "items",
        where: "source = ?",
        whereArgs: [id],
      );
      batch.delete(
        "sources",
        where: "sid = ?",
        whereArgs: [id],
      );
      _sources.remove(id);
      _deleted[id] = source;
    }
    await batch.commit(noResult: true);
    Global.feedsModel.initAll();
    notifyListeners();
  }

  Future<void> fetchFavicons() async {
    for (var key in _sources.keys) {
      if (_sources[key].iconUrl == null) {
        _fetchFavicon(_sources[key].url).then((url) {
          if (!_sources.containsKey(key)) return;
          var source = _sources[key].clone();
          source.iconUrl = url == null ? "" : url;
          put(source);
        });
      }
    }
  }

  Future<String> _fetchFavicon(String url) async {
    try {
        url = url.split("/").getRange(0, 3).join("/");
        var result = await http.get(url);
        if (result.statusCode == 200) {
            var htmlStr = result.body;
            var dom = parse(htmlStr);
            var links = dom.getElementsByTagName("link");
            for (var link in links) {
                var rel = link.attributes["rel"];
                if ((rel == "icon" || rel == "shortcut icon") && link.attributes.containsKey("href")) {
                    var href = link.attributes["href"];
                    var parsedUrl = Uri.parse(url);
                    if (href.startsWith("//")) return parsedUrl.scheme + ":" + href;
                    else if (href.startsWith("/")) return url + href;
                    else return href;
                }
            }
        }
        url = url + "/favicon.ico";
        if (await Utils.validateFavicon(url)) { 
            return url;
        } else {
            return null;
        }
    } catch(exp) {
        return null;
    }
  }

  
}

A  => lib/models/sync_model.dart +64 -0
@@ 1,64 @@
import 'package:fluent_reader_lite/utils/global.dart';
import 'package:fluent_reader_lite/utils/store.dart';
import 'package:flutter/cupertino.dart';

class SyncModel with ChangeNotifier {
  bool hasService = Global.service != null;
  bool syncing = false;
  bool _lastSyncSuccess = Store.sp.getBool(StoreKeys.LAST_SYNC_SUCCESS) ?? true;
  DateTime _lastSynced = DateTime.fromMillisecondsSinceEpoch(
    Store.sp.getInt(StoreKeys.LAST_SYNCED) ?? 0
  );

  void checkHasService() {
    var value = Global.service != null;
    if (value != hasService) {
      hasService = value;
      notifyListeners();
    }
  }

  Future<void> removeService() async {
    if (syncing || Global.service == null) return;
    syncing = true;
    notifyListeners();
    var sids = Global.sourcesModel.getSources()
      .map((s) => s.id)
      .toList();
    await Global.sourcesModel.removeSources(sids);
    Global.service.remove();
    hasService = false;
    syncing = false;
    notifyListeners();
  }

  bool get lastSyncSuccess => _lastSyncSuccess;
  set lastSyncSuccess(bool value) {
    _lastSyncSuccess = value;
    Store.sp.setBool(StoreKeys.LAST_SYNC_SUCCESS, value);
  }

  DateTime get lastSynced => _lastSynced;
  set lastSynced(DateTime value) {
    _lastSynced = value;
    Store.sp.setInt(StoreKeys.LAST_SYNCED, value.millisecondsSinceEpoch);
  }

  Future<void> syncWithService() async {
    if (syncing || Global.service == null) return;
    syncing = true;
    notifyListeners();
    try {
      await Global.sourcesModel.updateSources();
      await Global.itemsModel.syncItems();
      await Global.itemsModel.fetchItems();
      lastSyncSuccess = true;
    } catch(exp) {
      lastSyncSuccess = false;
      print(exp);
    }
    lastSynced = DateTime.now();
    syncing = false;
    notifyListeners();
  }
}
\ No newline at end of file

A  => lib/pages/article_page.dart +229 -0
@@ 1,229 @@
import 'dart:io';

import 'package:fluent_reader_lite/generated/l10n.dart';
import 'package:fluent_reader_lite/models/feeds_model.dart';
import 'package:fluent_reader_lite/models/item.dart';
import 'package:fluent_reader_lite/models/items_model.dart';
import 'package:fluent_reader_lite/models/source.dart';
import 'package:fluent_reader_lite/models/sources_model.dart';
import 'package:fluent_reader_lite/utils/colors.dart';
import 'package:fluent_reader_lite/utils/global.dart';
import 'package:fluent_reader_lite/utils/store.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:http/http.dart' as http;
import 'package:provider/provider.dart';
import 'package:tuple/tuple.dart';
import 'package:share/share.dart';
import 'package:fluent_reader_lite/components/cupertino_toolbar.dart';
import 'package:url_launcher/url_launcher.dart';
import 'package:webview_flutter_plus/webview_flutter_plus.dart';

class ArticlePage extends StatefulWidget {
  static final GlobalKey<ArticlePageState> state = GlobalKey();

  ArticlePage() : super(key: state);

  @override
  ArticlePageState createState() => ArticlePageState();
}

class ArticlePageState extends State<ArticlePage> {
  WebViewPlusController _controller;
  int requestId = 0;
  bool loaded = false;
  bool navigated = false;
  SourceOpenTarget _target;
  String iid;
  bool isSourceFeed;

  void loadNewItem(String id, {bool isSource}) {
    if (!Global.itemsModel.getItem(id).hasRead) {
      Global.itemsModel.updateItem(id, read: true);
    }
    setState(() {
      iid = id;
      loaded = false;
      navigated = false;
      _target = null;
      if (isSource != null) isSourceFeed = isSource;
    });
  }

  Future<NavigationDecision> _onNavigate(NavigationRequest request) async {
    if (navigated && request.isForMainFrame) {
      await launch(request.url);
      return NavigationDecision.prevent;
    } else {
      return NavigationDecision.navigate;
    }
  }

  void _loadHtml(RSSItem item, RSSSource source, {loadFull: false}) async {
    var localUrl = "assets/article/article.html";
    var currId = requestId;
    String a;
    if (loadFull) {
      try {
        var html = (await http.get(item.link)).body;
        a = Uri.encodeComponent(html);
      } catch(exp) {
        setState(() { loaded = true; });
        return;
      }
    } else {
      a = Uri.encodeComponent(item.content);
    }
    var h = '<p id="source">${source.name}${(item.creator!=null&&item.creator.length>0)?' / '+item.creator:''}</p>';
    h += '<p id="title">${item.title}</p>';
    h += '<p id="date">${DateFormat.yMd(Localizations.localeOf(context).toString()).add_Hm().format(item.date)}</p>';
    h += '<article></article>';
    h = Uri.encodeComponent(h);
    var s = Store.getArticleFontSize();
    localUrl += "?a=$a&h=$h&s=$s&u=${item.link}&m=${loadFull ? 1 : 0}";
    if (Platform.isAndroid || Global.globalModel.getBrightness() != null) {
      var brightness = Global.currentBrightness(context);
      localUrl += "&t=${brightness.index}";
    }
    if (currId == requestId) _controller.loadUrl(localUrl);
  }

  void _onPageReady(_) async {
    if (Platform.isAndroid || Global.globalModel.getBrightness() != null) {
      await Future.delayed(Duration(milliseconds: 300));
    }
    setState(() { loaded = true; });
  }
  void _onWebpageReady(_) {
    if (loaded) navigated = true;
  }

  void _setOpenTarget(RSSSource source, {SourceOpenTarget target}) {
    setState(() {
      _target = target ?? source.openTarget;
    });
  }

  void _loadOpenTarget(RSSItem item, RSSSource source) {
    setState(() {
      requestId += 1;
      loaded = false;
      navigated = false;
    });
    switch (_target) {
      case SourceOpenTarget.Local:
        _loadHtml(item, source);
        break;
      case SourceOpenTarget.FullContent:
        _loadHtml(item, source, loadFull: true);
        break;
      case SourceOpenTarget.Webpage:
      case SourceOpenTarget.External:
        _controller.loadUrl(item.link);
        break;
    }
  }

  @override
  Widget build(BuildContext context) {
    final Tuple2<String, bool> arguments = ModalRoute.of(context).settings.arguments;
    if (iid == null) iid = arguments.item1;
    if (isSourceFeed == null) isSourceFeed = arguments.item2;
    final resolvedDarkGrey = MyColors.dynamicDarkGrey.resolveFrom(context);
    final viewOptions = {
      0: Padding(child: Icon(Icons.rss_feed, color: resolvedDarkGrey), padding: EdgeInsets.symmetric(horizontal: 8)),
      1: Icon(Icons.article_outlined, color: resolvedDarkGrey),
      2: Icon(Icons.language, color: resolvedDarkGrey),
    };
    return Selector2<ItemsModel, SourcesModel, Tuple2<RSSItem, RSSSource>>(
      selector: (context, itemsModel, sourcesModel) {
        var item = itemsModel.getItem(iid);
        var source = sourcesModel.getSource(item.source);
        return Tuple2(item, source);
      },
      builder: (context, tuple, child) {
        var item = tuple.item1;
        var source = tuple.item2;
        if (_target == null) _target = source.openTarget;
        final body = SafeArea(child: IndexedStack(
          index: !loaded ? 0 : 1,
          children: [
            Center(
              child: CupertinoActivityIndicator()
            ),
            WebViewPlus(
              key: Key("a-$iid-${_target.index}"),
              javascriptMode: JavascriptMode.unrestricted,
              onWebViewCreated: (WebViewPlusController webViewController) {
                _controller = webViewController;
                _loadOpenTarget(item, source);
              },
              onPageStarted: _onPageReady,
              onPageFinished: _onWebpageReady,
              navigationDelegate: _onNavigate,
            ),
          ],
        ), bottom: false,);
        return CupertinoPageScaffold(
          navigationBar: CupertinoNavigationBar(
            backgroundColor: CupertinoColors.systemBackground,
            middle: CupertinoSlidingSegmentedControl(
              children: viewOptions,
              onValueChanged: (v) { _setOpenTarget(source, target: SourceOpenTarget.values[v]); },
              groupValue: _target.index,
            ),
          ),
          child: Consumer<FeedsModel>(
            child: body,
            builder: (context, feedsModel, child) {
              final feed = isSourceFeed ? feedsModel.source : feedsModel.all;
              var idx = feed.iids.indexOf(iid);
              return CupertinoToolbar(
                items: [
                  CupertinoToolbarItem(
                    icon: item.hasRead ? CupertinoIcons.circle : CupertinoIcons.smallcircle_fill_circle,
                    onPressed: () {
                      Global.itemsModel.updateItem(item.id, read: !item.hasRead);
                    },
                  ),
                  CupertinoToolbarItem(
                    icon: item.starred ? CupertinoIcons.star_fill : CupertinoIcons.star,
                    onPressed: () {
                      Global.itemsModel.updateItem(item.id, starred: !item.starred);
                    },
                  ),
                  CupertinoToolbarItem(
                    icon: CupertinoIcons.share,
                    onPressed: () { Share.share(item.link); },
                  ),
                  CupertinoToolbarItem(
                    icon: CupertinoIcons.chevron_up,
                    onPressed: idx <= 0 ? null : () {
                      loadNewItem(feed.iids[idx - 1]);
                    },
                  ),
                  CupertinoToolbarItem(
                    icon: CupertinoIcons.chevron_down,
                    onPressed: (idx == -1 || (idx == feed.iids.length - 1 && feed.allLoaded))
                      ? null
                      : () async {
                        if (idx == feed.iids.length - 1) {
                          await feed.loadMore();
                        }
                        idx = feed.iids.indexOf(iid);
                        if (idx != feed.iids.length - 1) {
                          loadNewItem(feed.iids[idx + 1]);
                        }
                      },
                  ),
                ],
                body: child,
              );
            },
          ),
        );
      },
    );
  }
}

A  => lib/pages/group_list_page.dart +103 -0
@@ 1,103 @@
import 'package:fluent_reader_lite/components/badge.dart';
import 'package:fluent_reader_lite/components/dismissible_background.dart';
import 'package:fluent_reader_lite/components/mark_all_action_sheet.dart';
import 'package:fluent_reader_lite/components/my_list_tile.dart';
import 'package:fluent_reader_lite/generated/l10n.dart';
import 'package:fluent_reader_lite/models/groups_model.dart';
import 'package:fluent_reader_lite/models/source.dart';
import 'package:fluent_reader_lite/models/sources_model.dart';
import 'package:fluent_reader_lite/utils/global.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/services.dart';
import 'package:provider/provider.dart';

class GroupListPage extends StatefulWidget {
  @override
  _GroupListPageState createState() => _GroupListPageState();
}

class _GroupListPageState extends State<GroupListPage> {
  int _unreadCount(Iterable<RSSSource> sources) {
    return sources.fold(0, (c, s) => c + (s != null ? s.unreadCount : 0));
  }

  static const _dismissThresholds = {
    DismissDirection.startToEnd: 0.25,
  };

  @override
  Widget build(BuildContext context) {
    final navigationBar = CupertinoSliverNavigationBar(
      largeTitle: Text(S.of(context).groups),
      automaticallyImplyLeading: false,
      backgroundColor: Global.isTablet ? CupertinoColors.systemBackground : null,
      leading: CupertinoButton(
        padding: EdgeInsets.zero,
        child: Text(S.of(context).cancel),
        onPressed: () { Navigator.of(context).pop(); },
      ),
    );
    final allSources = Consumer<SourcesModel>(
      builder: (context, sourcesModel, child) {
        var count = _unreadCount(sourcesModel.getSources());
        return SliverToBoxAdapter(child: MyListTile(
          title: Text(S.of(context).allSubscriptions),
          trailing: count > 0 ? Badge(count) : null,
          onTap: () { Navigator.of(context).pop(List<String>()); },
          background: CupertinoColors.systemBackground,
        ));
      },
    );
    final dismissBg = DismissibleBackground(CupertinoIcons.checkmark_circle, true);
    final groupList = Consumer2<GroupsModel, SourcesModel>(
      builder: (context, groupsModel, sourcesModel, child) {
        final groupNames = groupsModel.groups.keys.toList();
        groupNames.sort();
        return SliverList(
          delegate: SliverChildBuilderDelegate((context, index) {
            final groupName = groupNames[index];
            final count = _unreadCount(
              groupsModel.groups[groupName].map((sid) => sourcesModel.getSource(sid))
            );
            final tile = MyListTile(
              title: Flexible(child: Text(groupName, overflow: TextOverflow.ellipsis)),
              trailing: count > 0 ? Badge(count) : null,
              onTap: () { Navigator.of(context).pop([groupName]); },
              background: CupertinoColors.systemBackground,
            );
            return Dismissible(
              key: Key(groupName),
              child: tile,
              background: dismissBg,
              direction: DismissDirection.startToEnd,
              dismissThresholds: _dismissThresholds,
              confirmDismiss: (_) async {
                HapticFeedback.mediumImpact();
                Set<String> sids = Set.from(groupsModel.groups[groupName]);
                showCupertinoModalPopup(
                  context: context,
                  builder: (context) => MarkAllActionSheet(sids),
                );
                return false;
              },
            );
          }, childCount: groupNames.length),
        );
      },
    );
    final padding = SliverToBoxAdapter(child: Padding(
      padding: EdgeInsets.only(bottom: 80),
    ),);
    return CupertinoPageScaffold(
      backgroundColor: CupertinoColors.systemBackground,
      child: CupertinoScrollbar(child: CustomScrollView(
        slivers: [
          navigationBar,
          allSources,
          groupList,
          padding,
        ],
      ))
    );
  }
}

A  => lib/pages/home_page.dart +121 -0
@@ 1,121 @@
import 'package:fluent_reader_lite/generated/l10n.dart';
import 'package:fluent_reader_lite/main.dart';
import 'package:fluent_reader_lite/models/sync_model.dart';
import 'package:fluent_reader_lite/pages/setup_page.dart';
import 'package:fluent_reader_lite/pages/subscription_list_page.dart';
import 'package:fluent_reader_lite/pages/tablet_base_page.dart';
import 'package:fluent_reader_lite/utils/global.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:responsive_builder/responsive_builder.dart';

import 'item_list_page.dart';

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class ScrollTopNotifier with ChangeNotifier {
  int index = 0;
  
  void onTap(int newIndex) {
    var oldIndex = index;
    index = newIndex;
    if (newIndex == oldIndex) notifyListeners();
  } 
}

class _HomePageState extends State<HomePage> {
  final _scrollTopNotifier = ScrollTopNotifier();

  Widget _constructPage(Widget page, bool isMobile) {
    return isMobile
      ? CupertinoPageScaffold(
        child: page,
        backgroundColor: CupertinoColors.systemBackground.resolveFrom(context),
      )
      : Container(
        child: page,
        color: CupertinoColors.systemBackground.resolveFrom(context),
      );
  }

  @override
  Widget build(BuildContext context) {
    return Selector<SyncModel, bool>(
      selector: (context, syncModel) => syncModel.hasService,
      builder: (context, hasService, child) {
        if (!hasService) return SetupPage();
        var isMobile = true;
        var left = CupertinoTabScaffold(
          backgroundColor: CupertinoColors.systemBackground,
          tabBar: CupertinoTabBar(
            backgroundColor: CupertinoColors.systemBackground,
            onTap: _scrollTopNotifier.onTap,
            items: [
              BottomNavigationBarItem(
                icon: Icon(Icons.timeline),
                label: S.of(context).feed,
              ),
              BottomNavigationBarItem(
                icon: Icon(Icons.list),
                label: S.of(context).subscriptions,
              ),
            ],
          ),
          tabBuilder: (context, index) {
            return CupertinoTabView(
              routes: {
                '/feed': (context) {
                  Widget page = ItemListPage(_scrollTopNotifier);
                  return _constructPage(page, isMobile);
                },
              },
              builder: (context) {
                Widget page = index == 0
                  ? ItemListPage(_scrollTopNotifier)
                  : SubscriptionListPage(_scrollTopNotifier);
                return _constructPage(page, isMobile);
              },
            );
          },
        );
        return ScreenTypeLayout.builder(
          mobile: (context) => left,
          tablet: (context) {
            isMobile = false;
            var right = Container(
              decoration: BoxDecoration(),
              clipBehavior: Clip.hardEdge,
              child: CupertinoTabView(
              navigatorKey: Global.tabletPanel,
              routes: {
                "/": (context) => TabletBasePage(),
                ...MyApp.baseRoutes,
              },
            ));
            return Container(
              color: CupertinoColors.systemBackground.resolveFrom(context),
              child: Row(
                children: [
                  Container(
                    constraints: BoxConstraints(maxWidth: 320),
                    child: left,
                  ),
                  VerticalDivider(
                    width: 1,
                    thickness: 1,
                    color: CupertinoColors.systemGrey4.resolveFrom(context),
                  ),
                  Expanded(child: right),
                ],
              )
            );
          },
        );
      },
    );
  }
}

A  => lib/pages/item_list_page.dart +376 -0
@@ 1,376 @@
import 'package:fluent_reader_lite/components/article_item.dart';
import 'package:fluent_reader_lite/components/badge.dart';
import 'package:fluent_reader_lite/components/mark_all_action_sheet.dart';
import 'package:fluent_reader_lite/components/responsive_action_sheet.dart';
import 'package:fluent_reader_lite/components/sync_control.dart';
import 'package:fluent_reader_lite/generated/l10n.dart';
import 'package:fluent_reader_lite/models/feed.dart';
import 'package:fluent_reader_lite/models/feeds_model.dart';
import 'package:fluent_reader_lite/models/item.dart';
import 'package:fluent_reader_lite/models/items_model.dart';
import 'package:fluent_reader_lite/models/source.dart';
import 'package:fluent_reader_lite/models/sources_model.dart';
import 'package:fluent_reader_lite/pages/settings/text_editor_page.dart';
import 'package:fluent_reader_lite/utils/global.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:share/share.dart';
import 'package:tuple/tuple.dart';

import 'home_page.dart';

class ItemListPage extends StatefulWidget {
  final ScrollTopNotifier scrollTopNotifier;

  ItemListPage(this.scrollTopNotifier, {Key key}) : super(key: key);

  @override
  _ItemListPageState createState() => _ItemListPageState();
}

class _ItemListPageState extends State<ItemListPage> {
  DateTime lastLoadedMore;

  void _onScrollTop() {
    var expectedCanPop = widget.scrollTopNotifier.index == 1;
    if (expectedCanPop == Navigator.of(context).canPop()) {
      PrimaryScrollController.of(context).animateTo(
        0,
        curve: Curves.easeOut,
        duration: const Duration(milliseconds: 300),
      );
    }
  }

  @override
  void initState() {
    super.initState();
    widget.scrollTopNotifier.addListener(_onScrollTop);
  }
  
  @override
  void dispose() {
    widget.scrollTopNotifier.removeListener(_onScrollTop);
    super.dispose();
  }

  RSSFeed getFeed() {
    return ModalRoute.of(context).settings.arguments != null
     ? Global.feedsModel.source
     : Global.feedsModel.all;
  }

  bool _onScroll(ScrollNotification scrollInfo) {
    var feed = getFeed();
    if (!ModalRoute.of(context).isCurrent
      || !feed.initialized || feed.loading || feed.allLoaded) {
      return true;
    }
    if (scrollInfo.metrics.extentAfter == 0.0 &&
      scrollInfo.metrics.pixels >= scrollInfo.metrics.maxScrollExtent * 0.8 &&
      (lastLoadedMore == null || DateTime.now().difference(lastLoadedMore).inSeconds > 1)) {
      lastLoadedMore = DateTime.now();
      feed.loadMore();
    }
    return false;
  }

  void _openMarkAllModal() {
    showCupertinoModalPopup(
      context: context,
      builder: (context) => MarkAllActionSheet(getFeed().sids),
    );
  }

  static const _iconPadding = Padding(padding: EdgeInsets.only(left: 24));

  void _openFilterModal() {
    showCupertinoModalPopup(
      context: context,
      builder: (context) {
        final feed = getFeed();
        final sheet = CupertinoActionSheet(
          title: Text(S.of(context).filter),
          actions: [
            CupertinoActionSheetAction(
              child: Row(children: [
                Icon(CupertinoIcons.today),
                Text(S.of(context).allArticles),
                _iconPadding,
              ], mainAxisAlignment: MainAxisAlignment.spaceBetween),
              onPressed: () { 
                Navigator.of(context, rootNavigator: true).pop();
                feed.setFilter(FilterType.All);
                _onScrollTop();
              },
            ),
            CupertinoActionSheetAction(
              child: Row(children: [
                Icon(Icons.radio_button_checked),
                Text(S.of(context).unreadOnly),
                _iconPadding,
              ], mainAxisAlignment: MainAxisAlignment.spaceBetween),
              onPressed: () { 
                Navigator.of(context, rootNavigator: true).pop();
                feed.setFilter(FilterType.Unread);
                _onScrollTop();
              },
            ),
            CupertinoActionSheetAction(
              child: Row(children: [
                Icon(CupertinoIcons.star_fill),
                Text(S.of(context).starredOnly),
                _iconPadding,
              ], mainAxisAlignment: MainAxisAlignment.spaceBetween),
              onPressed: () { 
                Navigator.of(context, rootNavigator: true).pop();
                feed.setFilter(FilterType.Starred);
                _onScrollTop();
              },
            ),
            CupertinoActionSheetAction(
              isDestructiveAction: true,
              child: Row(children: [
                Icon(CupertinoIcons.search, color: CupertinoColors.destructiveRed),
                Text(feed.search.length > 0 ? S.of(context).editKeyword : S.of(context).search),
                _iconPadding,
              ], mainAxisAlignment: MainAxisAlignment.spaceBetween),
              onPressed: () { 
                Navigator.of(context, rootNavigator: true).pop();
                _editSearchKeyword();
              },
            ),
            if (feed.search.length > 0) CupertinoActionSheetAction(
              isDestructiveAction: true,
              child: Row(children: [
                Icon(CupertinoIcons.clear_fill, color: CupertinoColors.destructiveRed),
                Text(S.of(context).clearSearch),
                _iconPadding,
              ], mainAxisAlignment: MainAxisAlignment.spaceBetween),
              onPressed: () { 
                Navigator.of(context, rootNavigator: true).pop();
                feed.performSearch("");
                _onScrollTop();
              },
            ),
          ],
          cancelButton: CupertinoActionSheetAction(
            child: Text(S.of(context).cancel),
            onPressed: () { 
              Navigator.of(context, rootNavigator: true).pop();
            },
          ),
        );
        return ResponsiveActionSheet(sheet);
      }
    );
  }

  void _editSearchKeyword() async {
    String keyword = await Navigator.of(context).push(CupertinoPageRoute(
      builder: (context) => TextEditorPage(
        S.of(context).editKeyword,
        (v) => v.trim().length > 0,
        saveText: S.of(context).search,
        initialValue: getFeed().search,
        navigationBarColor: CupertinoColors.systemBackground,
      ),
    ));
    if (keyword == null) return;
    getFeed().performSearch(keyword);
    _onScrollTop();
  }

  void _openActionSheet(RSSItem item) {
    showCupertinoModalPopup(
      context: context,
      builder: (context) {
        final sheet = CupertinoActionSheet(
          actions: [
            CupertinoActionSheetAction(
              child: Row(children: [
                Icon(item.hasRead ? Icons.radio_button_checked : Icons.radio_button_unchecked),
                Text(item.hasRead ? S.of(context).markUnread : S.of(context).markRead),
                _iconPadding,
              ], mainAxisAlignment: MainAxisAlignment.spaceBetween),
              onPressed: () { 
                Navigator.of(context, rootNavigator: true).pop();
                Global.itemsModel.updateItem(item.id, read: !item.hasRead);
              },
            ),
            CupertinoActionSheetAction(
              child: Row(children: [
                Icon(item.starred ? CupertinoIcons.star : CupertinoIcons.star_fill),
                Text(item.starred ? S.of(context).unstar : S.of(context).star),
                _iconPadding,
              ], mainAxisAlignment: MainAxisAlignment.spaceBetween),
              onPressed: () { 
                Navigator.of(context, rootNavigator: true).pop();
                Global.itemsModel.updateItem(item.id, starred: !item.starred);
              },
            ),
            CupertinoActionSheetAction(
              child: Row(children: [
                Icon(CupertinoIcons.arrow_up),
                Text(S.of(context).markAbove),
                _iconPadding,
              ], mainAxisAlignment: MainAxisAlignment.spaceBetween),
              onPressed: () { 
                Navigator.of(context, rootNavigator: true).pop();
                Global.itemsModel.markAllRead(getFeed().sids, date: item.date, before: false);
              },
            ),
            CupertinoActionSheetAction(
              child: Row(children: [
                Icon(CupertinoIcons.arrow_down),
                Text(S.of(context).markBelow),
                _iconPadding,
              ], mainAxisAlignment: MainAxisAlignment.spaceBetween),
              onPressed: () { 
                Navigator.of(context, rootNavigator: true).pop();
                Global.itemsModel.markAllRead(getFeed().sids, date: item.date);
              },
            ),
            CupertinoActionSheetAction(
              child: Row(children: [
                Icon(CupertinoIcons.share),
                Text(S.of(context).share),
                _iconPadding,
              ], mainAxisAlignment: MainAxisAlignment.spaceBetween),
              onPressed: () { 
                Navigator.of(context, rootNavigator: true).pop();
                Share.share(item.link);
              },
            ),
          ],
          cancelButton: CupertinoActionSheetAction(
            child: Text(S.of(context).cancel),
            onPressed: () { 
              Navigator.of(context, rootNavigator: true).pop();
            },
          ),
        );
        return ResponsiveActionSheet(sheet);
      },
    );
  }

  @override
  Widget build(BuildContext context) {
    final String title = ModalRoute.of(context).settings.arguments;
    final titleWidget = Row(
      mainAxisSize: MainAxisSize.min,
      children: [
        Container(
          constraints: BoxConstraints(
            maxWidth: Global.isTablet
              ? 260
              : MediaQuery.of(context).size.width - 60,
          ),
          child: Text(
            title ?? S.of(context).allArticles, 
            overflow: TextOverflow.ellipsis,
          ),
        ),
        Consumer<SourcesModel>(
          builder: (context, sourcesModel, child) {
            var sources = sourcesModel.getSources();
            if (title != null) {
              var feed = getFeed();
              sources = sources.where((s) => feed.sids.contains(s.id));
            }
            var count = sources.fold(0, (c, s) => c + s.unreadCount);
            if (count > 0) {
              return Padding(
                padding: EdgeInsets.only(left: 4),
                child: Badge(count, color: CupertinoColors.systemBlue),
              );
            }
            return Container();
          },
        ),
      ],
    );
    final navigationBar = CupertinoSliverNavigationBar(
      stretch: false,
      heroTag: title != null ? "source" : "all",
      transitionBetweenRoutes: true,
      backgroundColor: CupertinoColors.systemBackground,
      largeTitle: titleWidget,
      trailing: Container(
        transform: Matrix4.translationValues(12, 0, 0),
        child: Row(
          mainAxisSize: MainAxisSize.min,
          children: [
            CupertinoButton(
              padding: EdgeInsets.zero,
              child: Icon(CupertinoIcons.checkmark_circle),
              onPressed: _openMarkAllModal,
            ),
            Consumer<FeedsModel>(
              builder: (context, feedsModel, child) {
                var feed = getFeed();
                return CupertinoButton(
                  padding: EdgeInsets.zero,
                  child: Icon((feed.filterType != FilterType.All || feed.search.length > 0)
                    ? CupertinoIcons.line_horizontal_3_decrease_circle_fill
                    : CupertinoIcons.line_horizontal_3_decrease_circle
                  ),
                  onPressed: _openFilterModal,
                );
              },
            ),
          ]
        ),
      )
    );
    final subscriptionList = Consumer<FeedsModel>(
      builder: (context, feedsModel, child) {
        var feed = getFeed();
        return SliverList(
          delegate: SliverChildBuilderDelegate((content, index) {
            return Selector2<ItemsModel, SourcesModel, Tuple2<RSSItem, RSSSource>>(
              key: Key(feed.iids[index]),
              selector: (context, itemsModel, sourcesModel) {
                var item = itemsModel.getItem(feed.iids[index]);
                var source = sourcesModel.getSource(item.source);
                return Tuple2(item, source);
              },
              builder: (context, tuple, child) => ArticleItem(
                tuple.item1, tuple.item2, _openActionSheet
              ),
            );
          }, childCount: feed.iids.length),
        );
      },
    );
    final loadMoreIndicator = Consumer<FeedsModel>(
      builder: (context, feedsModel, child) {
        var feed = getFeed();
        return SliverToBoxAdapter(child: Padding(
          padding: EdgeInsets.symmetric(vertical: 20),
          child: Center(
            child: feed.allLoaded
              ? Text("All loaded", style: TextStyle(
                  color: CupertinoColors.secondaryLabel.resolveFrom(context),
                ))
              : CupertinoActivityIndicator()
          ),
        ));
      }
    );
    return NotificationListener<ScrollNotification>(
        onNotification: _onScroll,
        child: CupertinoScrollbar(child: CustomScrollView(
          slivers: [
            navigationBar,
            SyncControl(),
            subscriptionList,
            loadMoreIndicator,
          ],
        )),
      );
  }
  
}
\ No newline at end of file

A  => lib/pages/settings/about_page.dart +58 -0
@@ 1,58 @@
import 'package:fluent_reader_lite/components/list_tile_group.dart';
import 'package:fluent_reader_lite/components/my_list_tile.dart';
import 'package:fluent_reader_lite/generated/l10n.dart';
import 'package:fluent_reader_lite/utils/colors.dart';
import 'package:flutter/cupertino.dart';

class AboutPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final String version = ModalRoute.of(context).settings.arguments ?? "1.0.0";
    final nameStyle = TextStyle(
      color: CupertinoColors.label.resolveFrom(context),
      fontSize: 18,
      fontWeight: FontWeight.bold,
      height: 1.5,
    );
    final versionStyle = TextStyle(
      color: CupertinoColors.label.resolveFrom(context),
      fontSize: 14,
      height: 1.5,
    );
    final copyrightStyle = TextStyle(
      color: CupertinoColors.secondaryLabel.resolveFrom(context),
      fontSize: 12,
      height: 2,
    );
    return CupertinoPageScaffold(
      backgroundColor: MyColors.background,
      navigationBar: CupertinoNavigationBar(
        middle: Text(S.of(context).about),
      ),
      child: ListView(
        children: [
          Container(
            padding: EdgeInsets.symmetric(vertical: 100),
            child: Column(
              children: [
                Image.asset("assets/icons/logo.png", width: 80, height: 80),
                Text("Fluent Reader Lite", style: nameStyle),
                Text("${S.of(context).version} $version", style: versionStyle),
                Text("Copyright © 2021 Haoyuan Liu. All rights reserved.", style: copyrightStyle),
              ],
            ),
          ),
          ListTileGroup([
            MyListTile(
              title: Text(S.of(context).openSource),
            ),
            MyListTile(
              title: Text(S.of(context).feedback),
              withDivider: false,
            ),
          ]),
        ],
      ),
    );
  }
}
\ No newline at end of file

A  => lib/pages/settings/feed_page.dart +107 -0
@@ 1,107 @@
import 'package:fluent_reader_lite/components/list_tile_group.dart';
import 'package:fluent_reader_lite/components/my_list_tile.dart';
import 'package:fluent_reader_lite/generated/l10n.dart';
import 'package:fluent_reader_lite/models/feeds_model.dart';
import 'package:fluent_reader_lite/utils/colors.dart';
import 'package:flutter/cupertino.dart';
import 'package:provider/provider.dart';
import 'package:tuple/tuple.dart';

class FeedPage extends StatelessWidget {
  void _openGestureOptions(BuildContext context, bool isToRight) {
    Navigator.of(context).push(CupertinoPageRoute(
      builder: (context) => CupertinoPageScaffold(
        backgroundColor: MyColors.background,
        navigationBar: CupertinoNavigationBar(
          middle: Text(isToRight ? S.of(context).swipeRight : S.of(context).swipeLeft),
        ),
        child: Consumer<FeedsModel>(
          builder: (context, feedsModel, child) {
            final swipeOptons = [
              Tuple2(S.of(context).toggleRead, ItemSwipeOption.ToggleRead),
              Tuple2(S.of(context).toggleStar, ItemSwipeOption.ToggleStar),
              Tuple2(S.of(context).share, ItemSwipeOption.Share),
              Tuple2(S.of(context).openExternal, ItemSwipeOption.OpenExternal),
              Tuple2(S.of(context).openMenu, ItemSwipeOption.OpenMenu),
            ];
            return ListView(children: [
              ListTileGroup.fromOptions(
                swipeOptons,
                isToRight ? feedsModel.swipeR : feedsModel.swipeL,
                (v) { 
                  if (isToRight) feedsModel.swipeR = v;
                  else feedsModel.swipeL = v;
                },
              ),
            ]);
          },
        ),
      ),
    ));
  }

  @override
  Widget build(BuildContext context) {
    return CupertinoPageScaffold(
      backgroundColor: MyColors.background,
      navigationBar: CupertinoNavigationBar(
        middle: Text(S.of(context).feed),
      ),
      child: Consumer<FeedsModel>(
        builder: (context, feedsModel, child) {
          final swipeOptons = {
            ItemSwipeOption.ToggleRead: S.of(context).toggleRead,
            ItemSwipeOption.ToggleStar: S.of(context).toggleStar,
            ItemSwipeOption.Share: S.of(context).share,
            ItemSwipeOption.OpenExternal: S.of(context).openExternal,
            ItemSwipeOption.OpenMenu: S.of(context).openMenu,
          };
          return ListView(
            children: [
              ListTileGroup([
                MyListTile(
                  title: Text(S.of(context).showThumb),
                  trailing: CupertinoSwitch(
                    value: feedsModel.showThumb,
                    onChanged: (v) { feedsModel.showThumb = v; },
                  ),
                  trailingChevron: false,
                ),
                MyListTile(
                  title: Text(S.of(context).showSnippet),
                  trailing: CupertinoSwitch(
                    value: feedsModel.showSnippet,
                    onChanged: (v) { feedsModel.showSnippet = v; },
                  ),
                  trailingChevron: false,
                ),
                MyListTile(
                  title: Text(S.of(context).dimRead),
                  trailing: CupertinoSwitch(
                    value: feedsModel.dimRead,
                    onChanged: (v) { feedsModel.dimRead = v; },
                  ),
                  trailingChevron: false,
                  withDivider: false,
                ),
              ], title: S.of(context).preferences),
              ListTileGroup([
                MyListTile(
                  title: Text(S.of(context).swipeRight),
                  trailing: Text(swipeOptons[feedsModel.swipeR]),
                  onTap: () { _openGestureOptions(context, true); },
                ),
                MyListTile(
                  title: Text(S.of(context).swipeLeft),
                  trailing: Text(swipeOptons[feedsModel.swipeL]),
                  onTap: () { _openGestureOptions(context, false); },
                  withDivider: false,
                ),
              ], title: S.of(context).gestures),
            ],
          );
        },
      ),
    );
  }
}
\ No newline at end of file

A  => lib/pages/settings/general_page.dart +108 -0
@@ 1,108 @@
import 'package:fluent_reader_lite/components/list_tile_group.dart';
import 'package:fluent_reader_lite/components/my_list_tile.dart';
import 'package:fluent_reader_lite/generated/l10n.dart';
import 'package:fluent_reader_lite/models/global_model.dart';
import 'package:fluent_reader_lite/utils/colors.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_cache_manager/flutter_cache_manager.dart';
import 'package:provider/provider.dart';
import 'package:tuple/tuple.dart';

class GeneralPage extends StatefulWidget {
  @override
  _GeneralPageState createState() => _GeneralPageState();
}

class _GeneralPageState extends State<GeneralPage> {
  bool _clearingCache = false;

  void _clearCache() async {
    setState(() { _clearingCache = true; });
    await DefaultCacheManager().emptyCache();
    if (!mounted) return;
    setState(() { _clearingCache = false; });
  }

  @override
  Widget build(BuildContext context) => CupertinoPageScaffold(
    backgroundColor: MyColors.background,
    navigationBar: CupertinoNavigationBar(
      middle: Text(S.of(context).general),
    ),
    child: Consumer<GlobalModel>(
      builder: (context, globalModel, child) {
        final syncItems = ListTileGroup([
          MyListTile(
            title: Text(S.of(context).onStart),
            trailing: CupertinoSwitch(
              value: globalModel.syncOnStart,
              onChanged: (v) {
                globalModel.syncOnStart = v;
                setState(() {});
              },
            ),
            trailingChevron: false,
            withDivider: false,
          ),
        ], title: S.of(context).sync);
        final storageItems = ListTileGroup([
          MyListTile(
            title: Text(S.of(context).clearCache),
            onTap: _clearingCache ? null : _clearCache,
            trailing: _clearingCache ? CupertinoActivityIndicator() : null,
            trailingChevron: !_clearingCache,
          ),
          MyListTile(
            title: Text(S.of(context).autoDelete),
            trailing: Text(S.of(context).daysAgo(globalModel.keepItemsDays)),
            trailingChevron: false,
            withDivider: false,
          ),
          MyListTile(
            title: Expanded(child: CupertinoSlider(
              min: 1,
              max: 4,
              divisions: 3,
              value: (globalModel.keepItemsDays ~/ 7).toDouble(),
              onChanged: (v) { 
                globalModel.keepItemsDays = (v * 7).toInt(); 
                setState(() { });
              },
            )),
            trailingChevron: false,
            withDivider: false,
          ),
        ], title: S.of(context).storage);
        final themeItems = ListTileGroup.fromOptions(
          [
            Tuple2(S.of(context).followSystem, ThemeSetting.Default),
            Tuple2(S.of(context).light, ThemeSetting.Light),
            Tuple2(S.of(context).dark, ThemeSetting.Dark),
          ],
          globalModel.theme,
          (t) { globalModel.theme = t; },
          title: S.of(context).theme,
        );
        final localeItems = ListTileGroup.fromOptions(
          [
            Tuple2(S.of(context).followSystem, null),
            Tuple2("English", Locale("en")),
            Tuple2("中文(简体)", Locale("zh")),
          ],
          globalModel.locale,
          (l) { globalModel.locale = l; },
          title: S.of(context).language,
        );
        return ListView(
          children: [
            syncItems,
            storageItems,
            themeItems,
            localeItems,
          ],
        );
      },
    ),
  );
}

A  => lib/pages/settings/reading_page.dart +47 -0
@@ 1,47 @@
import 'package:fluent_reader_lite/components/list_tile_group.dart';
import 'package:fluent_reader_lite/components/my_list_tile.dart';
import 'package:fluent_reader_lite/generated/l10n.dart';
import 'package:fluent_reader_lite/utils/colors.dart';
import 'package:fluent_reader_lite/utils/store.dart';
import 'package:flutter/cupertino.dart';

class ReadingPage extends StatefulWidget {
  @override
  _ReadingPageState createState() => _ReadingPageState();
}

class _ReadingPageState extends State<ReadingPage> {
  int _fontSize = Store.getArticleFontSize();

  @override
  Widget build(BuildContext context) {
    return CupertinoPageScaffold(
      backgroundColor: MyColors.background,
      navigationBar: CupertinoNavigationBar(
        middle: Text(S.of(context).reading),
      ),
      child: ListView(children: [
        ListTileGroup([
          MyListTile(
            title: Text(S.of(context).fontSize),
            trailing: Text(_fontSize.toString()),
            trailingChevron: false,
            withDivider: false,
          ),
          MyListTile(
            title: Expanded(child: CupertinoSlider(
              min: 10,
              max: 22,
              divisions: 13,
              value: _fontSize.toDouble(),
              onChanged: (v) { setState(() { _fontSize = v.toInt(); }); },
              onChangeEnd: (v) { Store.setArticleFontSize(v.toInt()); },
            )),
            trailingChevron: false,
            withDivider: false,
          ),
        ], title: S.of(context).preferences),
      ]),
    );
  }
}

A  => lib/pages/settings/services/fever_page.dart +234 -0
@@ 1,234 @@
import 'dart:convert';

import 'package:crypto/crypto.dart';
import 'package:fluent_reader_lite/components/list_tile_group.dart';
import 'package:fluent_reader_lite/components/my_list_tile.dart';
import 'package:fluent_reader_lite/generated/l10n.dart';
import 'package:fluent_reader_lite/models/services/fever.dart';
import 'package:fluent_reader_lite/models/sync_model.dart';
import 'package:fluent_reader_lite/pages/settings/text_editor_page.dart';
import 'package:fluent_reader_lite/utils/colors.dart';
import 'package:fluent_reader_lite/utils/global.dart';
import 'package:fluent_reader_lite/utils/store.dart';
import 'package:fluent_reader_lite/utils/utils.dart';
import 'package:flutter/cupertino.dart';
import 'package:provider/provider.dart';

class FeverPage extends StatefulWidget {
  @override
  _FeverPageState createState() => _FeverPageState();
}

class _FeverPageState extends State<FeverPage> {
  String _endpoint = Store.sp.getString(StoreKeys.ENDPOINT) ?? "";
  String _username = Store.sp.getString(StoreKeys.USERNAME) ?? "";
  String _password = Store.sp.getString(StoreKeys.PASSWORD) ?? "";
  int _fetchLimit = Store.sp.getInt(StoreKeys.FETCH_LIMIT) ?? 250;
  bool _validating = false;

  void _editEndpoint() async {
    final String endpoint = await Navigator.of(context).push(CupertinoPageRoute(
      builder: (context) => TextEditorPage(
        S.of(context).endpoint, 
        Utils.testUrl,
        initialValue: _endpoint,
      ),
    ));
    if (endpoint == null) return;
    setState(() { _endpoint = endpoint; });
  }

  void _editUsername() async {
    final String username = await Navigator.of(context).push(CupertinoPageRoute(
      builder: (context) => TextEditorPage(
        S.of(context).username, 
        Utils.notEmpty,
        initialValue: _username,
      ),
    ));
    if (username == null) return;
    setState(() { _username = username; });
  }

  void _editPassword() async {
    final String password = await Navigator.of(context).push(CupertinoPageRoute(
      builder: (context) => TextEditorPage(
        S.of(context).password, 
        Utils.notEmpty,
        isPassword: true,
      ),
    ));
    if (password == null) return;
    setState(() { _password = password; });
  }

  bool _canSave() {
    if (_validating) return false;
    return _endpoint.length > 0 && _username.length > 0 && _password.length > 0;
  }

  void _save() async {
    final apiKey = md5.convert(utf8.encode("$_username:$_password")).toString();
    final handler = FeverServiceHandler.fromValues(
      _endpoint,
      apiKey,
      _fetchLimit
    );
    setState(() { _validating = true; });
    final isValid = await handler.validate();
    if (!mounted) return;
    if (isValid) {
      handler.persist(_username, _password);
      await Global.syncModel.syncWithService();
      Global.syncModel.checkHasService();
      _validating = false;
      if (mounted) Navigator.of(context).pop();
    } else {
      setState(() { _validating = false; });
      Utils.showServiceFailureDialog(context);
    }
  }

  void _logOut() async {
    final bool confirmed = await showCupertinoDialog(
      context: context,
      builder: (context) => CupertinoAlertDialog(
        title: Text(S.of(context).logOutWarning),
        actions: [
          CupertinoDialogAction(
            isDefaultAction: true,
            child: Text(S.of(context).cancel),
            onPressed: () {
              Navigator.of(context).pop();
            },
          ),
          CupertinoDialogAction(
            isDestructiveAction: true,
            child: Text(S.of(context).confirm),
            onPressed: () {
              Navigator.of(context).pop(true);
            },
          ),
        ],
      ),
    );
    if (confirmed != null) {
      setState(() { _validating = true; });
      await Global.syncModel.removeService();
      setState(() { _validating = false; });
      final navigator = Navigator.of(context);
      while (navigator.canPop()) navigator.pop();
    }
  }

  @override
  Widget build(BuildContext context) {
    final inputs = ListTileGroup([
      MyListTile(
        title: Text(S.of(context).endpoint),
        trailing: Text(_endpoint.length == 0
          ? S.of(context).enter
          : S.of(context).entered),
        onTap: _editEndpoint,
      ),
      MyListTile(
        title: Text(S.of(context).username),
        trailing: Text(_username.length == 0
          ? S.of(context).enter
          : S.of(context).entered),
        onTap: _editUsername,
      ),
      MyListTile(
        title: Text(S.of(context).password),
        trailing: Text(_password.length == 0
          ? S.of(context).enter
          : S.of(context).entered),
        onTap: _editPassword,
        withDivider: false,
      ),
    ], title: S.of(context).credentials);
    final syncItems = ListTileGroup([
      MyListTile(
        title: Text(S.of(context).fetchLimit),
        trailing: Text(_fetchLimit.toString()),
        trailingChevron: false,
        withDivider: false,
      ),
      MyListTile(
        title: Expanded(child: CupertinoSlider(
          min: 250,
          max: 1500,
          divisions: 5,
          value: _fetchLimit.toDouble(),
          onChanged: (v) { setState(() { _fetchLimit = v.toInt(); }); },
        )),
        trailingChevron: false,
        withDivider: false,
      ),
    ], title: S.of(context).sync);
    final saveButton = Selector<SyncModel, bool>(
      selector: (context, syncModel) => syncModel.syncing,
      builder: (context, syncing, child) {
        var canSave = !syncing && _canSave();
        final saveStyle = TextStyle(
          color: canSave
            ? CupertinoColors.activeBlue.resolveFrom(context)
            : CupertinoColors.secondaryLabel.resolveFrom(context),
        );
        return ListTileGroup([
          MyListTile(
            title: Expanded(child: Center(
              child: _validating
                ? CupertinoActivityIndicator()
                : Text(
                  S.of(context).save,
                  style: saveStyle,
                )
            )),
            onTap: canSave ? _save : null,
            trailingChevron: false,
            withDivider: false,
          ),
        ], title: "");
      },
    );
    final logOutButton = Selector<SyncModel, bool>(
      selector: (context, syncModel) => syncModel.syncing,
      builder: (context, syncing, child) {
        return ListTileGroup([
          MyListTile(
            title: Expanded(child: Center(
              child: Text(
                S.of(context).logOut,
                style: TextStyle(
                  color: (_validating || syncing)
                    ? CupertinoColors.secondaryLabel.resolveFrom(context)
                    : CupertinoColors.destructiveRed,
                ),
              )
            )),
            onTap: (_validating || syncing) ? null : _logOut,
            trailingChevron: false,
            withDivider: false,
          ),
        ], title: "");
      },
    );
    final page = CupertinoPageScaffold(
      backgroundColor: MyColors.background,
      navigationBar: CupertinoNavigationBar(
        middle: Text("Fever API"),
      ),
      child: ListView(children: [
        inputs,
        syncItems,
        saveButton,
        if (Global.service != null) logOutButton,
      ]),
    );
    return WillPopScope(
      child: page,
      onWillPop: () async => !_validating,
    );
  }
}

A  => lib/pages/settings/source_edit_page.dart +107 -0
@@ 1,107 @@
import 'package:fluent_reader_lite/components/list_tile_group.dart';
import 'package:fluent_reader_lite/components/my_list_tile.dart';
import 'package:fluent_reader_lite/generated/l10n.dart';
import 'package:fluent_reader_lite/models/source.dart';
import 'package:fluent_reader_lite/models/sources_model.dart';
import 'package:fluent_reader_lite/pages/settings/text_editor_page.dart';
import 'package:fluent_reader_lite/utils/colors.dart';
import 'package:fluent_reader_lite/utils/global.dart';
import 'package:fluent_reader_lite/utils/utils.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:provider/provider.dart';
import 'package:tuple/tuple.dart';

class SourceEditPage extends StatelessWidget {
  void _editName(BuildContext context, RSSSource source) async {
    final String name = await Navigator.of(context).push(CupertinoPageRoute(
      builder: (context) => TextEditorPage(
        S.of(context).name,
        (v) => v.trim().length > 0,
        initialValue: source.name,
      ),
    ));
    if (name == null || name == source.name) return;
    var cloned = source.clone();
    cloned.name = name;
    await Global.sourcesModel.put(cloned);
  }

  void _editIcon(BuildContext context, RSSSource source) async {
    final String iconUrl = await Navigator.of(context).push(CupertinoPageRoute(
      builder: (context) => TextEditorPage(
        S.of(context).icon,
        (v) async {
          var trimmed = v.trim();
          if (trimmed.length == 0) return false;
          return await Utils.validateFavicon(trimmed);
        },
        initialValue: source.iconUrl,
      ),
    ));
    if (iconUrl == null || iconUrl == source.iconUrl) return;
    var cloned = source.clone();
    cloned.iconUrl = iconUrl;
    await Global.sourcesModel.put(cloned);
  }

  @override
  Widget build(BuildContext context) {
    final String sid = ModalRoute.of(context).settings.arguments;
    return Selector<SourcesModel, RSSSource>(
      selector: (context, sourcesModel) => sourcesModel.getSource(sid),
      builder: (context, source, child) {
        final urlStyle = TextStyle(
          color: CupertinoColors.secondaryLabel.resolveFrom(context),
        );
        final urlTile = ListTileGroup([
          MyListTile(
            title: Flexible(child: Text(source.url, style: urlStyle, overflow: TextOverflow.ellipsis)),
            trailing: Icon(CupertinoIcons.doc_on_clipboard),
            onTap: () { Clipboard.setData(ClipboardData(text: source.url)); },
            trailingChevron: false,
            withDivider: false,
          ),
        ], title: "URL");
        final editSource = ListTileGroup([
          MyListTile(
            title: Text(S.of(context).name),
            onTap: () { _editName(context, source); },
          ),
          MyListTile(
            title: Text(S.of(context).icon),
            onTap: () { _editIcon(context, source); },
            withDivider: false,
          ),
        ], title: S.of(context).edit);
        final openTarget = ListTileGroup.fromOptions(
          [
            Tuple2(S.of(context).rssText, SourceOpenTarget.Local),
            Tuple2(S.of(context).loadFull, SourceOpenTarget.FullContent),
            Tuple2(S.of(context).loadWebpage, SourceOpenTarget.Webpage),
            Tuple2(S.of(context).openExternal, SourceOpenTarget.External),
          ],
          source.openTarget,
          (v) {
            var cloned = source.clone();
            cloned.openTarget = v;
            Global.sourcesModel.put(cloned);
          },
          title: S.of(context).openTarget,
        );
        return CupertinoPageScaffold(
          backgroundColor: MyColors.background,
          navigationBar: CupertinoNavigationBar(
            middle: Text(source.name, overflow: TextOverflow.ellipsis),
          ),
          child: ListView(children: [
            urlTile,
            editSource,
            openTarget,
          ],),
        );
      },
    );
  }
}

A  => lib/pages/settings/sources_page.dart +35 -0
@@ 1,35 @@
import 'package:fluent_reader_lite/components/favicon.dart';
import 'package:fluent_reader_lite/components/list_tile_group.dart';
import 'package:fluent_reader_lite/components/my_list_tile.dart';
import 'package:fluent_reader_lite/generated/l10n.dart';
import 'package:fluent_reader_lite/models/sources_model.dart';
import 'package:fluent_reader_lite/utils/colors.dart';
import 'package:flutter/cupertino.dart';
import 'package:provider/provider.dart';

class SourcesPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return CupertinoPageScaffold(
      backgroundColor: MyColors.background,
      navigationBar: CupertinoNavigationBar(
        middle: Text(S.of(context).subscriptions),
      ),
      child: ListView(children: [
        Consumer<SourcesModel>(
          builder: (context, sourcesModel, child) {
            var sources = sourcesModel.getSources().toList();
            return ListTileGroup(sources.map((s) => MyListTile(
              title: Flexible(child: Text(s.name, overflow: TextOverflow.ellipsis)),
              leading: Favicon(s, size: 20),
              withDivider: s.id != sources.last.id,
              onTap: () {
                Navigator.of(context).pushNamed("/settings/sources/edit", arguments: s.id);
              },
            )));
          },
        ),
      ]),
    ); 
  }
}
\ No newline at end of file

A  => lib/pages/settings/text_editor_page.dart +99 -0
@@ 1,99 @@
import 'dart:async';

import 'package:fluent_reader_lite/components/list_tile_group.dart';
import 'package:fluent_reader_lite/generated/l10n.dart';
import 'package:fluent_reader_lite/utils/colors.dart';
import 'package:flutter/cupertino.dart';

class TextEditorPage extends StatefulWidget {
  final String title;
  final String saveText;
  final String initialValue;
  final Color navigationBarColor;
  final FutureOr<bool> Function(String) validate;
  final bool isPassword;

  TextEditorPage(
    this.title,
    this.validate,
    {
      this.navigationBarColor,
      this.saveText,
      this.initialValue: "",
      this.isPassword: false,
      Key key,
    })
    : super(key: key);

  @override
  _TextEditorPage createState() => _TextEditorPage();
}

class _TextEditorPage extends State<TextEditorPage> {
  TextEditingController _controller;
  bool _validating = false;

  @override
  void initState() {
    super.initState();
    _controller = TextEditingController(text: widget.initialValue);
  }

  void _onSave() async {
    setState(() { _validating = true; });
    var trimmed = _controller.text.trim();
    var valid = await widget.validate(trimmed);
    if (!mounted) return;
    setState(() { _validating = false; });
    if (valid) {
      Navigator.of(context).pop(trimmed);
    } else {
      showCupertinoDialog(
        context: context,
        builder: (context) => CupertinoAlertDialog(
          title: Text(S.of(context).invalidValue),
          actions: [
            CupertinoDialogAction(
              child: Text(S.of(context).close),
              isDefaultAction: true,
              onPressed: () { Navigator.of(context).pop(); },
            ),
          ],
        ),
      );
    }
  }
  
  @override
  Widget build(BuildContext context) {
    return CupertinoPageScaffold(
      backgroundColor: MyColors.background,
      navigationBar: CupertinoNavigationBar(
        middle: Text(widget.title),
        backgroundColor: widget.navigationBarColor,
        trailing: CupertinoButton(
          padding: EdgeInsets.zero,
          child: _validating
            ? CupertinoActivityIndicator()
            : Text(widget.saveText ?? S.of(context).save),
          onPressed: _validating ? null : _onSave,
        ),
      ),
      child: ListView(children: [
        ListTileGroup([
          CupertinoTextField(
            controller: _controller,
            decoration: null,
            padding: EdgeInsets.symmetric(horizontal: 16, vertical: 12),
            clearButtonMode: OverlayVisibilityMode.editing,
            readOnly: _validating,
            autofocus: true,
            obscureText: widget.isPassword,
            keyboardType: widget.isPassword ? TextInputType.visiblePassword : null,
            onSubmitted: (v) { _onSave(); },
          ),
        ]),
      ]),
    );
  }
}

A  => lib/pages/settings_page.dart +70 -0
@@ 1,70 @@
import 'dart:io';

import 'package:fluent_reader_lite/components/list_tile_group.dart';
import 'package:fluent_reader_lite/components/my_list_tile.dart';
import 'package:fluent_reader_lite/generated/l10n.dart';
import 'package:fluent_reader_lite/utils/colors.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:package_info/package_info.dart';

class SettingsPage extends StatefulWidget {
  @override
  _SettingsPageState createState() => _SettingsPageState();
}

class _SettingsPageState extends State<SettingsPage> {
  @override
  Widget build(BuildContext context) {
    return CupertinoPageScaffold(
      backgroundColor: MyColors.background,
      navigationBar: CupertinoNavigationBar(
        middle: Text(S.of(context).settings),
      ),
      child: ListView(children: [
        ListTileGroup([
          MyListTile(
            title: Text(S.of(context).subscriptions),
            leading: Icon(Icons.rss_feed, color: CupertinoColors.systemOrange, size: 24),
            onTap: () { Navigator.of(context).pushNamed("/settings/sources"); },
          ),
          MyListTile(
            title: Text(S.of(context).feed),
            leading: Icon(Icons.timeline, color: CupertinoColors.systemBlue, size: 24),
            onTap: () { Navigator.of(context).pushNamed("/settings/feed"); },
          ),
          MyListTile(
            title: Text(S.of(context).reading),
            leading: Icon(Icons.article_outlined, color: CupertinoColors.systemBlue, size: 24),
            onTap: () { Navigator.of(context).pushNamed("/settings/reading"); },
            withDivider: false,
          ),
        ], title: S.of(context).preferences),
        ListTileGroup([
          MyListTile(
            title: Text(S.of(context).service),
            leading: Icon(Icons.account_circle, color: CupertinoColors.systemOrange, size: 24),
            onTap: () { Navigator.of(context).pushNamed("/settings/service"); },
            withDivider: false,
          ),
        ], title: S.of(context).account),
        ListTileGroup([
          MyListTile(
            title: Text(S.of(context).general),
            leading: Icon(Icons.toggle_on, color: CupertinoColors.systemGreen, size: 24),
            onTap: () { Navigator.of(context).pushNamed("/settings/general"); },
          ),
          MyListTile(
            title: Text(S.of(context).about),
            leading: Icon(Icons.info, color: CupertinoColors.systemBlue, size: 24),
            onTap: () async {
              var infos = await PackageInfo.fromPlatform();
              Navigator.of(context).pushNamed("/settings/about", arguments: infos.version);
            },
            withDivider: false,
          ),
        ], title: S.of(context).app),
      ]),
    );
  }
}
\ No newline at end of file

A  => lib/pages/setup_page.dart +59 -0
@@ 1,59 @@
import 'package:fluent_reader_lite/components/list_tile_group.dart';
import 'package:fluent_reader_lite/components/my_list_tile.dart';
import 'package:fluent_reader_lite/generated/l10n.dart';
import 'package:fluent_reader_lite/utils/colors.dart';
import 'package:fluent_reader_lite/utils/global.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/services.dart';

class SetupPage extends StatelessWidget {
  void _configure(BuildContext context, String route) {
    Navigator.of(context).pushNamed(route);
  }

  @override
  Widget build(BuildContext context) {
    final welcomeStyle = TextStyle(
      color: CupertinoColors.label.resolveFrom(context),
      fontSize: 24,
      fontWeight: FontWeight.bold,
      height: 1.5,
    );
    final top = Container(
      padding: EdgeInsets.symmetric(vertical: 100),
      child: Column(
        children: [
          Image.asset("assets/icons/logo.png", width: 80, height: 80),
          Text(S.of(context).welcome, style: welcomeStyle),
        ],
      ),
    );
    final services = ListTileGroup([
      MyListTile(
        title: Text("Fever API"),
        onTap: () { _configure(context, "/settings/service/fever"); },
      ),
      MyListTile(
        title: Text("Google Reader API"),
      ),
      MyListTile(
        title: Text("Inoreader"),
      ),
      MyListTile(
        title: Text("Feedbin"),
      ),
    ], title: S.of(context).service);
    final page = CupertinoPageScaffold(
      backgroundColor: MyColors.background,
      child: ListView(children: [
        top,
        services,
      ]),
    );
    final b = Global.currentBrightness(context) == Brightness.light;
    return AnnotatedRegion<SystemUiOverlayStyle>(
      value: b ? SystemUiOverlayStyle.dark : SystemUiOverlayStyle.light,
      child: page,
    );
  }
}
\ No newline at end of file

A  => lib/pages/subscription_list_page.dart +212 -0
@@ 1,212 @@
import 'package:fluent_reader_lite/components/badge.dart';
import 'package:fluent_reader_lite/components/mark_all_action_sheet.dart';
import 'package:fluent_reader_lite/components/my_list_tile.dart';
import 'package:fluent_reader_lite/components/subscription_item.dart';
import 'package:fluent_reader_lite/components/sync_control.dart';
import 'package:fluent_reader_lite/generated/l10n.dart';
import 'package:fluent_reader_lite/models/source.dart';
import 'package:fluent_reader_lite/models/sources_model.dart';
import 'package:fluent_reader_lite/models/sync_model.dart';
import 'package:fluent_reader_lite/pages/group_list_page.dart';
import 'package:fluent_reader_lite/pages/home_page.dart';
import 'package:fluent_reader_lite/utils/colors.dart';
import 'package:fluent_reader_lite/utils/global.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:modal_bottom_sheet/modal_bottom_sheet.dart';
import 'package:provider/provider.dart';

class SubscriptionListPage extends StatefulWidget {
  final ScrollTopNotifier scrollTopNotifier;

  SubscriptionListPage(this.scrollTopNotifier, {Key key}) : super(key: key);

  @override
  _SubscriptionListPageState createState() {
    return _SubscriptionListPageState();
  }
}

class _SubscriptionListPageState extends State<SubscriptionListPage> {
  List<String> sids;
  String title;
  bool transitioning = false;

  void _onScrollTop() {
    if (widget.scrollTopNotifier.index == 1 && !Navigator.of(context).canPop()) {
      PrimaryScrollController.of(context).animateTo(
        0,
        curve: Curves.easeOut,
        duration: const Duration(milliseconds: 300),
      );
    }
  }

  @override
  void initState() {
    super.initState();
    widget.scrollTopNotifier.addListener(_onScrollTop);
  }
  
  @override
  void dispose() {
    widget.scrollTopNotifier.removeListener(_onScrollTop);
    super.dispose();
  }

  void _openGroups() async {
    List<String> result;
    if (Global.isTablet) {
      result = await Navigator.of(context).push(CupertinoPageRoute(
        builder: (context) => GroupListPage(),
      ));
    } else {
      setState(() { transitioning = true; });
      result = await CupertinoScaffold.showCupertinoModalBottomSheet(
        context: context,
        useRootNavigator: true,
        builder: (context) => GroupListPage(),
      );
    }
    if (!mounted) return;
    if (result != null) {
      if (result.length == 0) {
        setState(() {
          title = null;
          sids = null;
        });
      } else {
        setState(() {
          title = result[0];
          sids = Global.groupsModel.groups[title];
        });
      }
    }
    await Future.delayed(Duration(milliseconds: 300));
    setState(() { transitioning = false; });
  }

  void _openMarkAllModal() {
    showCupertinoModalPopup(
      context: context,
      builder: (context) => MarkAllActionSheet(sids == null ? {} : Set.from(sids)),
    );
  }

  void _openSettings() {
    Navigator.of(context, rootNavigator: true).pushNamed("/settings");
  }

  @override
  Widget build(BuildContext context) {
    final navigationBar = CupertinoSliverNavigationBar(
      stretch: false,
      largeTitle: Text(title ?? S.of(context).subscriptions),
      heroTag: "subscriptions",
      transitionBetweenRoutes: true,
      backgroundColor: transitioning ? MyColors.tileBackground : CupertinoColors.systemBackground,
      leading: CupertinoButton(
        padding: EdgeInsets.zero,
        child: Text(S.of(context).groups),
        onPressed: _openGroups,
      ),
      trailing: Container(
        transform: Matrix4.translationValues(12, 0, 0),
        child: Row(
          mainAxisSize: MainAxisSize.min,
          children: [
            CupertinoButton(
              padding: EdgeInsets.zero,
              child: Icon(CupertinoIcons.checkmark_circle),
              onPressed: _openMarkAllModal,
            ),
            CupertinoButton(
              padding: EdgeInsets.zero,
              child: Icon(CupertinoIcons.settings),
              onPressed: _openSettings,
            ),
          ],
        ), 
      )
    );
    final sourcesList = Consumer<SourcesModel>(
      builder: (context, sourcesModel, child) {
        List<RSSSource> sources;
        if (sids == null) {
          sources = Global.sourcesModel.getSources().toList();
        } else {
          sources = [];
          for (var sid in sids) {
            sources.add(Global.sourcesModel.getSource(sid));
          }
        }
        // Latest sources first
        sources.sort((a, b) {
          return b.latest.compareTo(a.latest);
        });
        return SliverList(
          delegate: SliverChildBuilderDelegate((content, index) {
            var source = sources[index];
            return SubscriptionItem(source, key: Key(source.id));
          }, childCount: sources.length),
        );
      },
    );
    final syncStyle = TextStyle(
      fontSize: 14,
      color: CupertinoColors.tertiaryLabel.resolveFrom(context),
    );
    final syncInfo = Consumer<SyncModel>(
      builder: (context, syncModel, child) {
        return SliverToBoxAdapter(
          child: Container(
            padding: EdgeInsets.all(12),
            child: Column(
              children: [
                Text(
                  syncModel.lastSyncSuccess
                    ? S.of(context).lastSyncSuccess
                    : S.of(context).lastSyncFailure,
                  style: syncStyle,
                ),
                Text(
                  DateFormat
                    .Md(Localizations.localeOf(context).toString())
                    .add_Hm().format(syncModel.lastSynced),
                  style: syncStyle,
                ),
              ],
            ),
          ),
        );
      },
    );
    return CupertinoScrollbar(child: CustomScrollView(
      slivers: [
        navigationBar,
        SyncControl(),
        if (sids != null) Consumer<SourcesModel>(
          builder: (context, sourcesModel, child) {
            var count = sids
              .map((sid) => sourcesModel.getSource(sid))
              .fold(0, (c, s) => c + s.unreadCount);
            return SliverToBoxAdapter(child: MyListTile(
              title: Text(S.of(context).allArticles),
              trailing: count > 0 ? Badge(count) : null,
              trailingChevron: false,
              onTap: () async { 
                await Global.feedsModel.initSourcesFeed(sids.toList());
                Navigator.of(context).pushNamed("/feed", arguments: title);
              },
              background: CupertinoColors.systemBackground,
            ));
          },
        ),
        sourcesList,
        syncInfo,
      ]
    ));
  }
  
}
\ No newline at end of file

A  => lib/pages/tablet_base_page.dart +22 -0
@@ 1,22 @@
import 'package:fluent_reader_lite/utils/global.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/services.dart';

class TabletBasePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    var b = Global.currentBrightness(context) == Brightness.light;
    return AnnotatedRegion<SystemUiOverlayStyle>(
      value: b ? SystemUiOverlayStyle.dark : SystemUiOverlayStyle.light,
      child: Container(
        color: CupertinoColors.systemBackground.resolveFrom(context),
        child: Center(
          child: Image.asset(
            "assets/icons/logo-outline${b?'':'-dark'}.png",
            width: 120, height: 120,
          ),
        ),
      ),
    );
  }
}
\ No newline at end of file

A  => lib/utils/colors.dart +31 -0
@@ 1,31 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';

class MyColors {
  static const background = CupertinoDynamicColor.withBrightness(
    color: CupertinoColors.extraLightBackgroundGray,
    darkColor: CupertinoColors.black,
  );

  static const tileBackground = CupertinoDynamicColor.withBrightness(
    color: CupertinoColors.white,
    darkColor: CupertinoColors.darkBackgroundGray,
  );

  static const barDivider = CupertinoDynamicColor.withBrightness(
    color: CupertinoColors.systemGrey2,
    darkColor: CupertinoColors.black,
  );

  static const dynamicBlack = CupertinoDynamicColor.withBrightness(
    color: CupertinoColors.black,
    darkColor: CupertinoColors.white,
  );

  static const dynamicDarkGrey = CupertinoDynamicColor.withBrightness(
    color: Colors.black87,
    darkColor: Colors.white70,
  );

  static const indicatorOrange = Color.fromRGBO(255, 170, 68, 1);
}
\ No newline at end of file

A  => lib/utils/db.dart +48 -0
@@ 1,48 @@
import 'dart:async';

import 'package:path/path.dart';
import 'package:sqflite/sqflite.dart';

abstract class DatabaseHelper {
  static final _dbName = "frlite.db";
  static final _dbVersion = 1;

  static Database _database;

  static Future<Database> getDatabase() async {
    if (_database != null) return _database;
    String path = join(await getDatabasesPath(), _dbName);
    _database = await openDatabase(path, version:_dbVersion, onCreate: _onCreate);
    return _database;
  }

  static Future<void> _onCreate(Database db, int version) async {
    await db.execute('''
      CREATE TABLE sources (
        sid TEXT PRIMARY KEY,
        url TEXT NOT NULL,
        iconUrl TEXT,
        name TEXT NOT NULL,
        openTarget INTEGER NOT NULL,
        latest INTEGER NOT NULL,
        lastTitle INTEGER NOT NULL
      );
    ''');
    await db.execute('''
    CREATE TABLE items (
        iid TEXT PRIMARY KEY,
        source TEXT NOT NULL,
        title TEXT NOT NULL,
        link TEXT NOT NULL,
        date INTEGER NOT NULL,
        content TEXT NOT NULL,
        snippet TEXT NOT NULL,
        hasRead INTEGER NOT NULL,
        starred INTEGER NOT NULL,
        creator TEXT,
        thumb TEXT
      );
    ''');
    await db.execute("CREATE INDEX itemsDate ON items (date DESC);");
  }
}
\ No newline at end of file

A  => lib/utils/global.dart +82 -0
@@ 1,82 @@
import 'package:fluent_reader_lite/models/feeds_model.dart';
import 'package:fluent_reader_lite/models/global_model.dart';
import 'package:fluent_reader_lite/models/groups_model.dart';
import 'package:fluent_reader_lite/models/items_model.dart';
import 'package:fluent_reader_lite/models/service.dart';
import 'package:fluent_reader_lite/models/services/fever.dart';
import 'package:fluent_reader_lite/models/sources_model.dart';
import 'package:fluent_reader_lite/models/sync_model.dart';
import 'package:fluent_reader_lite/utils/db.dart';
import 'package:fluent_reader_lite/utils/store.dart';
import 'package:flutter/cupertino.dart';
import 'package:sqflite/sqflite.dart';

abstract class Global {
  static bool _initialized = false;
  static GlobalModel globalModel;
  static SourcesModel sourcesModel;
  static ItemsModel itemsModel;
  static FeedsModel feedsModel;
  static GroupsModel groupsModel;
  static SyncModel syncModel;
  static ServiceHandler service;
  static Database db;
  static final GlobalKey<NavigatorState> tabletPanel = GlobalKey();

  static void init() {
    assert(!_initialized);
    _initialized = true;
    globalModel = GlobalModel();
    sourcesModel = SourcesModel();
    itemsModel = ItemsModel();
    feedsModel = FeedsModel();
    groupsModel = GroupsModel();
    var serviceType = SyncService.values[Store.sp.getInt(StoreKeys.SYNC_SERVICE) ?? 0];
    switch (serviceType) {
      case SyncService.None:
        break;
      case SyncService.Fever:
        service = FeverServiceHandler();
        break;
      case SyncService.Feedbin:
        // TODO: Handle this case.
        break;
      case SyncService.GReader:
        // TODO: Handle this case.
        break;
      case SyncService.Inoreader:
        // TODO: Handle this case.
        break;
    }
    syncModel = SyncModel();
    _initContents();
  }

  static void _initContents() async {
    db = await DatabaseHelper.getDatabase();
    await db.delete(
      "items",
      where: "date < ?",
      whereArgs: [
        DateTime.now()
          .subtract(Duration(days: globalModel.keepItemsDays))
          .millisecondsSinceEpoch,
      ],
    );
    await sourcesModel.init();
    await feedsModel.all.init();
    if (globalModel.syncOnStart) await syncModel.syncWithService();
  }

  static Brightness currentBrightness(BuildContext context) {
    return globalModel.getBrightness() ?? MediaQuery.of(context).platformBrightness;
  }

  static bool get isTablet => tabletPanel.currentWidget != null;

  static NavigatorState responsiveNavigator(BuildContext context) {
    return tabletPanel.currentWidget != null
      ? Global.tabletPanel.currentState
      : Navigator.of(context, rootNavigator: true);
  }
}
\ No newline at end of file

A  => lib/utils/store.dart +93 -0
@@ 1,93 @@
import 'dart:convert';

import 'package:fluent_reader_lite/models/global_model.dart';
import 'package:flutter/cupertino.dart';
import 'package:shared_preferences/shared_preferences.dart';

abstract class StoreKeys {
  static const GROUPS = "groups";
 
  // General
  static const THEME = "theme";
  static const LOCALE = "locale";
  static const KEEP_ITEMS_DAYS = "keepItemsD";
  static const SYNC_ON_START = "syncOnStart";

  // Feed preferences
  static const FEED_FILTER_ALL = "feedFilterA";
  static const FEED_FILTER_SOURCE = "feedFilterS";
  static const SHOW_THUMB = "showThumb";
  static const SHOW_SNIPPET = "showSnippet";
  static const DIM_READ = "dimRead";
  static const FEED_SWIPE_R = "feedSwipeR";
  static const FEED_SWIPE_L = "feedSwipeL";

  // Reading preferences
  static const ARTICLE_FONT_SIZE = "articleFontSize";

  // Syncing
  static const SYNC_SERVICE = "syncService";
  static const LAST_SYNCED = "lastSynced";
  static const LAST_SYNC_SUCCESS = "lastSyncSuccess";
  static const LAST_ID = "lastId";
  static const ENDPOINT = "endpoint";
  static const USERNAME = "username";
  static const PASSWORD = "password";
  static const API_KEY = "apiKey";
  static const FETCH_LIMIT = "fetchLimit";
  static const FEVER_INT_32 = "feverInt32";
}

class Store {
  // Initialized in main.dart
  static SharedPreferences sp;

  static Locale getLocale() {
    if (!sp.containsKey(StoreKeys.LOCALE)) return null;
    var localeString = sp.getString(StoreKeys.LOCALE);
    var splitted = localeString.split('_');
    if (splitted.length > 1) {
      return Locale(splitted[0], splitted[1]);
    } else {
      return Locale(localeString);
    }
  }

  static void setLocale(Locale locale) {
    if (locale == null) sp.remove(StoreKeys.LOCALE);
    else sp.setString(StoreKeys.LOCALE, locale.toString());
  }

  static ThemeSetting getTheme() {
    return sp.containsKey(StoreKeys.THEME) 
    ? ThemeSetting.values[sp.getInt(StoreKeys.THEME)]
    : ThemeSetting.Default;
  }

  static void setTheme(ThemeSetting theme) {
    sp.setInt(StoreKeys.THEME, theme.index);
  }

  static Map<String, List<String>> getGroups() {
    var groups = sp.getString(StoreKeys.GROUPS);
    if (groups == null) return Map();
    Map<String, List<String>> result = Map();
    var parsed = jsonDecode(groups);
    for (var key in parsed.keys) {
      result[key] = List.castFrom(parsed[key]);
    }
    return result;
  }

  static void setGroups(Map<String, List<String>> groups) {
    sp.setString(StoreKeys.GROUPS, jsonEncode(groups));
  }

  static int getArticleFontSize() {
    return sp.getInt(StoreKeys.ARTICLE_FONT_SIZE) ?? 16;
  }
  
  static void setArticleFontSize(int value) {
    sp.setInt(StoreKeys.ARTICLE_FONT_SIZE, value);
  }
}
\ No newline at end of file

A  => lib/utils/utils.dart +61 -0
@@ 1,61 @@
import 'package:fluent_reader_lite/generated/l10n.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;

abstract class Utils {
  static int binarySearch<T>(List<T> sortedList, T value, 
    int Function(T, T) compare) {
    var min = 0;
    var max = sortedList.length;
    while (min < max) {
      var mid = min + ((max - min) >> 1);
      var element = sortedList[mid];
      var comp = compare(element, value);
      if (comp == 0) return mid;
      if (comp < 0) {
        min = mid + 1;
      } else {
        max = mid;
      }
    }
    return min;
  }

  static Future<bool> validateFavicon(String url) async {
    var flag = false;
    try {
      var result = await http.get(url);
      if (result.statusCode == 200) {
        var contentType = result.headers["Content-Type"] ?? result.headers["content-type"];
        if (contentType != null && contentType.startsWith("image")) flag = true;
      }
    } finally {
      return flag;
    }
  }

  static final _urlRegex = RegExp(
    r"^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*$)",
    caseSensitive: false,
  );
  static bool testUrl(String url) => _urlRegex.hasMatch(url.trim());

  static bool notEmpty(String text) => text.trim().length > 0;

  static void showServiceFailureDialog(BuildContext context) {
    showCupertinoDialog(
      context: context,
      builder: (context) => CupertinoAlertDialog(
        title: Text(S.of(context).serviceFailure),
        content: Text(S.of(context).serviceFailureHint),
        actions: [
          CupertinoDialogAction(
            child: Text(S.of(context).close),
            onPressed: () { Navigator.of(context).pop(); },
          ),
        ],
      ),
    );
  }
}
\ No newline at end of file

A  => pubspec.lock +570 -0
@@ 1,570 @@
# Generated by pub
# See https://dart.dev/tools/pub/glossary#lockfile
packages:
  archive:
    dependency: transitive
    description:
      name: archive
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "2.0.13"
  args:
    dependency: transitive
    description:
      name: args
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "1.6.0"
  async:
    dependency: transitive
    description:
      name: async
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "2.5.0-nullsafety.3"
  boolean_selector:
    dependency: transitive
    description:
      name: boolean_selector
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "2.1.0-nullsafety.3"
  cached_network_image:
    dependency: "direct main"
    description:
      name: cached_network_image
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "2.5.0"
  characters:
    dependency: transitive
    description:
      name: characters
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "1.1.0-nullsafety.5"
  charcode:
    dependency: transitive
    description:
      name: charcode
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "1.2.0-nullsafety.3"
  clock:
    dependency: transitive
    description:
      name: clock
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "1.1.0-nullsafety.3"
  collection:
    dependency: transitive
    description:
      name: collection
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "1.15.0-nullsafety.5"
  convert:
    dependency: transitive
    description:
      name: convert
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "2.1.1"
  crypto:
    dependency: "direct main"
    description:
      name: crypto
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "2.1.5"
  csslib:
    dependency: transitive
    description:
      name: csslib
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "0.16.2"
  cupertino_icons:
    dependency: "direct main"
    description:
      name: cupertino_icons
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "1.0.0"
  fake_async:
    dependency: transitive
    description:
      name: fake_async
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "1.2.0-nullsafety.3"
  ffi:
    dependency: transitive
    description:
      name: ffi
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "0.1.3"
  file:
    dependency: transitive
    description:
      name: file
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "6.0.0-nullsafety.4"
  flutter:
    dependency: "direct main"
    description: flutter
    source: sdk
    version: "0.0.0"
  flutter_blurhash:
    dependency: transitive
    description:
      name: flutter_blurhash
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "0.5.0"
  flutter_cache_manager:
    dependency: "direct main"
    description:
      name: flutter_cache_manager
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "2.1.0"
  flutter_localizations:
    dependency: "direct main"
    description: flutter
    source: sdk
    version: "0.0.0"
  flutter_test:
    dependency: "direct dev"
    description: flutter
    source: sdk
    version: "0.0.0"
  flutter_web_plugins:
    dependency: transitive
    description: flutter
    source: sdk
    version: "0.0.0"
  html:
    dependency: "direct main"
    description:
      name: html
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "0.14.0+4"
  http:
    dependency: "direct main"
    description:
      name: http
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "0.12.2"
  http_parser:
    dependency: transitive
    description:
      name: http_parser
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "3.1.4"
  image:
    dependency: transitive
    description:
      name: image
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "2.1.19"
  intl:
    dependency: "direct main"
    description:
      name: intl
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "0.17.0-nullsafety.2"
  js:
    dependency: transitive
    description:
      name: js
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "0.6.3-nullsafety.3"
  matcher:
    dependency: transitive
    description:
      name: matcher
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "0.12.10-nullsafety.3"
  meta:
    dependency: transitive
    description:
      name: meta
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "1.3.0-nullsafety.6"
  mime:
    dependency: transitive
    description:
      name: mime
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "0.9.7"
  modal_bottom_sheet:
    dependency: "direct main"
    description:
      name: modal_bottom_sheet
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "1.0.0+1"
  nested:
    dependency: transitive
    description:
      name: nested
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "0.0.4"
  octo_image:
    dependency: transitive
    description:
      name: octo_image
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "0.3.0"
  package_info:
    dependency: "direct main"
    description:
      name: package_info
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "0.4.3+2"
  path:
    dependency: "direct main"
    description:
      name: path
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "1.8.0-nullsafety.3"
  path_provider:
    dependency: transitive
    description:
      name: path_provider
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "1.6.24"
  path_provider_linux:
    dependency: transitive
    description:
      name: path_provider_linux
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "0.0.1+2"
  path_provider_macos:
    dependency: transitive
    description:
      name: path_provider_macos
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "0.0.4+6"
  path_provider_platform_interface:
    dependency: transitive
    description:
      name: path_provider_platform_interface
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "1.0.4"
  path_provider_windows:
    dependency: transitive
    description:
      name: path_provider_windows
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "0.0.4+3"
  pedantic:
    dependency: transitive
    description:
      name: pedantic
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "1.9.2"
  petitparser:
    dependency: transitive
    description:
      name: petitparser
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "3.1.0"
  platform:
    dependency: transitive
    description:
      name: platform
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "3.0.0-nullsafety.4"
  plugin_platform_interface:
    dependency: transitive
    description:
      name: plugin_platform_interface
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "1.0.3"
  process:
    dependency: transitive
    description:
      name: process
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "4.0.0-nullsafety.4"
  provider:
    dependency: "direct main"
    description:
      name: provider
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "4.3.2+3"
  quiver:
    dependency: transitive
    description:
      name: quiver
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "2.1.5"
  responsive_builder:
    dependency: "direct main"
    description:
      name: responsive_builder
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "0.3.0"
  rxdart:
    dependency: transitive
    description:
      name: rxdart
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "0.25.0"
  share:
    dependency: "direct main"
    description:
      name: share
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "0.6.5+4"
  shared_preferences:
    dependency: "direct main"
    description:
      name: shared_preferences
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "0.5.12+4"
  shared_preferences_linux:
    dependency: transitive
    description:
      name: shared_preferences_linux
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "0.0.2+4"
  shared_preferences_macos:
    dependency: transitive
    description:
      name: shared_preferences_macos
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "0.0.1+11"
  shared_preferences_platform_interface:
    dependency: transitive
    description:
      name: shared_preferences_platform_interface
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "1.0.4"
  shared_preferences_web:
    dependency: transitive
    description:
      name: shared_preferences_web
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "0.1.2+7"
  shared_preferences_windows:
    dependency: transitive
    description:
      name: shared_preferences_windows
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "0.0.1+3"
  sky_engine:
    dependency: transitive
    description: flutter
    source: sdk
    version: "0.0.99"
  source_span:
    dependency: transitive
    description:
      name: source_span
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "1.8.0-nullsafety.4"
  sqflite:
    dependency: "direct main"
    description:
      name: sqflite
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "1.3.2+1"
  sqflite_common:
    dependency: transitive
    description:
      name: sqflite_common
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "1.0.2+1"
  stack_trace:
    dependency: transitive
    description:
      name: stack_trace
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "1.10.0-nullsafety.6"
  stream_channel:
    dependency: transitive
    description:
      name: stream_channel
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "2.1.0-nullsafety.3"
  string_scanner:
    dependency: transitive
    description:
      name: string_scanner
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "1.1.0-nullsafety.3"
  synchronized:
    dependency: transitive
    description:
      name: synchronized
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "2.2.0+2"
  term_glyph:
    dependency: transitive
    description:
      name: term_glyph
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "1.2.0-nullsafety.3"
  test_api:
    dependency: transitive
    description:
      name: test_api
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "0.2.19-nullsafety.6"
  tuple:
    dependency: "direct main"
    description:
      name: tuple
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "1.0.3"
  typed_data:
    dependency: transitive
    description:
      name: typed_data
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "1.3.0-nullsafety.5"
  url_launcher:
    dependency: "direct main"
    description:
      name: url_launcher
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "5.7.10"
  url_launcher_linux:
    dependency: transitive
    description:
      name: url_launcher_linux
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "0.0.1+4"
  url_launcher_macos:
    dependency: transitive
    description:
      name: url_launcher_macos
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "0.0.1+9"
  url_launcher_platform_interface:
    dependency: transitive
    description:
      name: url_launcher_platform_interface
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "1.0.9"
  url_launcher_web:
    dependency: transitive
    description:
      name: url_launcher_web
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "0.1.5+1"
  url_launcher_windows:
    dependency: transitive
    description:
      name: url_launcher_windows
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "0.0.1+3"
  uuid:
    dependency: transitive
    description:
      name: uuid
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "2.2.2"
  vector_math:
    dependency: transitive
    description:
      name: vector_math
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "2.1.0-nullsafety.5"
  webview_flutter:
    dependency: transitive
    description:
      name: webview_flutter
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "1.0.7"
  webview_flutter_plus:
    dependency: "direct main"
    description:
      name: webview_flutter_plus
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "0.1.1+10"
  win32:
    dependency: transitive
    description:
      name: win32
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "1.7.4"
  xdg_directories:
    dependency: transitive
    description:
      name: xdg_directories
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "0.1.2"
  xml:
    dependency: transitive
    description:
      name: xml
      url: "https://pub.flutter-io.cn"
    source: hosted
    version: "4.5.1"
sdks:
  dart: ">=2.12.0-0.0 <3.0.0"
  flutter: ">=1.22.2 <2.0.0"

A  => pubspec.yaml +98 -0
@@ 1,98 @@
name: fluent_reader_lite
description: A new Flutter project.

# The following line prevents the package from being accidentally published to
# pub.dev using `pub publish`. This is preferred for private packages.
publish_to: 'none' # Remove this line if you wish to publish to pub.dev

# The following defines the version and build number for your application.
# A version number is three numbers separated by dots, like 1.2.43
# followed by an optional build number separated by a +.
# Both the version and the builder number may be overridden in flutter
# build by specifying --build-name and --build-number, respectively.
# In Android, build-name is used as versionName while build-number used as versionCode.
# Read more about Android versioning at https://developer.android.com/studio/publish/versioning
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
# Read more about iOS versioning at
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
version: 1.0.0+1

environment:
  sdk: ">=2.7.0 <3.0.0"

dependencies:
  flutter:
    sdk: flutter
  flutter_localizations:
    sdk: flutter
  provider: ^4.3.2+3
  tuple: ^1.0.3
  shared_preferences: ^0.5.12+4
  intl: ^0.17.0-nullsafety.2
  http: ^0.12.2
  html: ^0.14.0+4
  webview_flutter_plus: ^0.1.1+10
  url_launcher: ^5.7.10
  sqflite: ^1.3.2+1
  path: ^1.7.0
  share: '>=0.6.5+4 <2.0.0'
  package_info: '>=0.4.3+1 <2.0.0'
  crypto: ^2.1.5
  responsive_builder: ^0.3.0
  cached_network_image: ^2.5.0
  flutter_cache_manager: ^2.1.0
  modal_bottom_sheet: ^1.0.0+1


  # The following adds the Cupertino Icons font to your application.
  # Use with the CupertinoIcons class for iOS style icons.
  cupertino_icons: ^1.0.0

dev_dependencies:
  flutter_test:
    sdk: flutter

# For information on the generic Dart part of this file, see the
# following page: https://dart.dev/tools/pub/pubspec

# The following section is specific to Flutter.
flutter:

  # The following line ensures that the Material Icons font is
  # included with your application, so that you can use the icons in
  # the material Icons class.
  uses-material-design: true

  # To add assets to your application, add an assets section, like this:
  assets:
    - assets/article/
    - assets/icons/
  
  # An image asset can refer to one or more resolution-specific "variants", see
  # https://flutter.dev/assets-and-images/#resolution-aware.

  # For details regarding adding assets from package dependencies, see
  # https://flutter.dev/assets-and-images/#from-packages

  # To add custom fonts to your application, add a fonts section here,
  # in this "flutter" section. Each entry in this list should have a
  # "family" key with the font family name, and a "fonts" key with a
  # list giving the asset and other descriptors for the font. For
  # example:
  # fonts:
  #   - family: Schyler
  #     fonts:
  #       - asset: fonts/Schyler-Regular.ttf
  #       - asset: fonts/Schyler-Italic.ttf
  #         style: italic
  #   - family: Trajan Pro
  #     fonts:
  #       - asset: fonts/TrajanPro.ttf
  #       - asset: fonts/TrajanPro_Bold.ttf
  #         weight: 700
  #
  # For details regarding fonts from package dependencies,
  # see https://flutter.dev/custom-fonts/#from-packages

flutter_intl:
  enabled: true

A  => test/widget_test.dart +30 -0
@@ 1,30 @@
// This is a basic Flutter widget test.
//
// To perform an interaction with a widget in your test, use the WidgetTester
// utility that Flutter provides. For example, you can send tap and scroll
// gestures. You can also use WidgetTester to find child widgets in the widget
// tree, read text, and verify that the values of widget properties are correct.

import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';

import 'package:fluent_reader_lite/main.dart';

void main() {
  testWidgets('Counter increments smoke test', (WidgetTester tester) async {
    // Build our app and trigger a frame.
    await tester.pumpWidget(MyApp());

    // Verify that our counter starts at 0.
    expect(find.text('0'), findsOneWidget);
    expect(find.text('1'), findsNothing);

    // Tap the '+' icon and trigger a frame.
    await tester.tap(find.byIcon(Icons.add));
    await tester.pump();

    // Verify that our counter has incremented.
    expect(find.text('0'), findsNothing);
    expect(find.text('1'), findsOneWidget);
  });
}