Showing preview only (9,881K chars total). Download the full file or copy to clipboard to get everything.
Repository: v2ray/v2ray.github.io
Branch: master
Commit: 40970b170d11
Files: 476
Total size: 9.3 MB
Directory structure:
gitextract_ndww95gq/
├── .gitignore
├── CNAME
├── awesome/
│ ├── ads.html
│ └── tools.html
├── chapter_00/
│ ├── 01_versions.html
│ ├── 02_donate.html
│ ├── command.html
│ ├── faq.html
│ ├── help.html
│ ├── install.html
│ ├── start.html
│ └── workflow.html
├── chapter_02/
│ ├── 01_overview.html
│ ├── 02_protocols.html
│ ├── 03_routing.html
│ ├── 04_dns.html
│ ├── 05_transport.html
│ ├── api.html
│ ├── env.html
│ ├── index.html
│ ├── mux.html
│ ├── policy.html
│ ├── protocols/
│ │ ├── blackhole.html
│ │ ├── dns.html
│ │ ├── dokodemo.html
│ │ ├── freedom.html
│ │ ├── http.html
│ │ ├── mtproto.html
│ │ ├── shadowsocks.html
│ │ ├── socks.html
│ │ └── vmess.html
│ ├── reverse.html
│ ├── stats.html
│ └── transport/
│ ├── domainsocket.html
│ ├── h2.html
│ ├── mkcp.html
│ ├── quic.html
│ ├── tcp.html
│ └── websocket.html
├── core/
│ └── index.html
├── developer/
│ ├── index.html
│ ├── intro/
│ │ ├── compile.html
│ │ ├── design.html
│ │ ├── guide.html
│ │ ├── roadmap.html
│ │ └── tools.html
│ └── protocols/
│ ├── mkcp.html
│ ├── muxcool.html
│ └── vmess.html
├── en/
│ ├── awesome/
│ │ ├── ads.html
│ │ └── tools.html
│ ├── configuration/
│ │ ├── api.html
│ │ ├── dns.html
│ │ ├── env.html
│ │ ├── index.html
│ │ ├── mux.html
│ │ ├── overview.html
│ │ ├── policy.html
│ │ ├── protocols/
│ │ │ ├── blackhole.html
│ │ │ ├── dns.html
│ │ │ ├── dokodemo.html
│ │ │ ├── freedom.html
│ │ │ ├── http.html
│ │ │ ├── mtproto.html
│ │ │ ├── shadowsocks.html
│ │ │ ├── socks.html
│ │ │ └── vmess.html
│ │ ├── protocols.html
│ │ ├── reverse.html
│ │ ├── routing.html
│ │ ├── stats.html
│ │ ├── transport/
│ │ │ ├── domainsocket.html
│ │ │ ├── h2.html
│ │ │ ├── mkcp.html
│ │ │ ├── quic.html
│ │ │ ├── tcp.html
│ │ │ └── websocket.html
│ │ └── transport.html
│ ├── developer/
│ │ └── tools.html
│ ├── gitbook/
│ │ ├── fonts/
│ │ │ └── fontawesome/
│ │ │ └── FontAwesome.otf
│ │ ├── gitbook-plugin-anchors/
│ │ │ └── plugin.css
│ │ ├── gitbook-plugin-ga/
│ │ │ └── plugin.js
│ │ ├── gitbook-plugin-hints/
│ │ │ └── plugin-hints.css
│ │ ├── gitbook-plugin-mermaid-gb3/
│ │ │ ├── book/
│ │ │ │ └── plugin.js
│ │ │ └── mermaid/
│ │ │ ├── mermaid.css
│ │ │ └── mermaid.forest.css
│ │ ├── gitbook-plugin-prism/
│ │ │ ├── prism-a11y-dark.css
│ │ │ ├── prism-atom-dark.css
│ │ │ ├── prism-base16-ateliersulphurpool.light.css
│ │ │ ├── prism-cb.css
│ │ │ ├── prism-darcula.css
│ │ │ ├── prism-dracula.css
│ │ │ ├── prism-duotone-dark.css
│ │ │ ├── prism-duotone-earth.css
│ │ │ ├── prism-duotone-forest.css
│ │ │ ├── prism-duotone-light.css
│ │ │ ├── prism-duotone-sea.css
│ │ │ ├── prism-duotone-space.css
│ │ │ ├── prism-ghcolors.css
│ │ │ ├── prism-hopscotch.css
│ │ │ ├── prism-material-dark.css
│ │ │ ├── prism-material-light.css
│ │ │ ├── prism-material-oceanic.css
│ │ │ ├── prism-pojoaque.css
│ │ │ ├── prism-shades-of-purple.css
│ │ │ ├── prism-synthwave84.css
│ │ │ ├── prism-vs.css
│ │ │ └── prism-xonokai.css
│ │ ├── gitbook.js
│ │ ├── style.css
│ │ └── theme.js
│ ├── index.html
│ ├── styles/
│ │ └── website.css
│ └── welcome/
│ ├── command.html
│ ├── donate.html
│ ├── faq.html
│ ├── help.html
│ ├── install.html
│ ├── start.html
│ ├── versions.html
│ └── workflow.html
├── ext/
│ └── index.html
├── fa/
│ ├── awesome/
│ │ ├── ads.html
│ │ └── tools.html
│ ├── configuration/
│ │ ├── api.html
│ │ ├── dns.html
│ │ ├── env.html
│ │ ├── index.html
│ │ ├── mux.html
│ │ ├── overview.html
│ │ ├── policy.html
│ │ ├── protocols/
│ │ │ ├── blackhole.html
│ │ │ ├── dns.html
│ │ │ ├── dokodemo.html
│ │ │ ├── freedom.html
│ │ │ ├── http.html
│ │ │ ├── mtproto.html
│ │ │ ├── shadowsocks.html
│ │ │ ├── socks.html
│ │ │ └── vmess.html
│ │ ├── protocols.html
│ │ ├── reverse.html
│ │ ├── routing.html
│ │ ├── stats.html
│ │ ├── transport/
│ │ │ ├── domainsocket.html
│ │ │ ├── h2.html
│ │ │ ├── mkcp.html
│ │ │ ├── quic.html
│ │ │ ├── tcp.html
│ │ │ └── websocket.html
│ │ └── transport.html
│ ├── developer/
│ │ └── tools.html
│ ├── gitbook/
│ │ ├── fonts/
│ │ │ └── fontawesome/
│ │ │ └── FontAwesome.otf
│ │ ├── gitbook-plugin-anchors/
│ │ │ └── plugin.css
│ │ ├── gitbook-plugin-ga/
│ │ │ └── plugin.js
│ │ ├── gitbook-plugin-hints/
│ │ │ └── plugin-hints.css
│ │ ├── gitbook-plugin-mermaid-gb3/
│ │ │ ├── book/
│ │ │ │ └── plugin.js
│ │ │ └── mermaid/
│ │ │ ├── mermaid.css
│ │ │ └── mermaid.forest.css
│ │ ├── gitbook-plugin-prism/
│ │ │ ├── prism-a11y-dark.css
│ │ │ ├── prism-atom-dark.css
│ │ │ ├── prism-base16-ateliersulphurpool.light.css
│ │ │ ├── prism-cb.css
│ │ │ ├── prism-darcula.css
│ │ │ ├── prism-dracula.css
│ │ │ ├── prism-duotone-dark.css
│ │ │ ├── prism-duotone-earth.css
│ │ │ ├── prism-duotone-forest.css
│ │ │ ├── prism-duotone-light.css
│ │ │ ├── prism-duotone-sea.css
│ │ │ ├── prism-duotone-space.css
│ │ │ ├── prism-ghcolors.css
│ │ │ ├── prism-hopscotch.css
│ │ │ ├── prism-material-dark.css
│ │ │ ├── prism-material-light.css
│ │ │ ├── prism-material-oceanic.css
│ │ │ ├── prism-pojoaque.css
│ │ │ ├── prism-shades-of-purple.css
│ │ │ ├── prism-synthwave84.css
│ │ │ ├── prism-vs.css
│ │ │ └── prism-xonokai.css
│ │ ├── gitbook.js
│ │ ├── style.css
│ │ └── theme.js
│ ├── index.html
│ ├── styles/
│ │ └── website.css
│ ├── ui_client/
│ │ ├── README.md
│ │ ├── android.md
│ │ ├── ios.md
│ │ ├── osx.md
│ │ ├── service.md
│ │ └── windows.md
│ └── welcome/
│ ├── command.html
│ ├── donate.html
│ ├── faq.html
│ ├── help.html
│ ├── install.html
│ ├── license.md
│ ├── pgp.md
│ ├── start.html
│ ├── tg.md
│ ├── versions.html
│ └── workflow.html
├── gitbook/
│ ├── fonts/
│ │ └── fontawesome/
│ │ └── FontAwesome.otf
│ ├── gitbook-plugin-anchors/
│ │ └── plugin.css
│ ├── gitbook-plugin-ga/
│ │ └── plugin.js
│ ├── gitbook-plugin-hints/
│ │ └── plugin-hints.css
│ ├── gitbook-plugin-mermaid-gb3/
│ │ ├── book/
│ │ │ └── plugin.js
│ │ └── mermaid/
│ │ ├── mermaid.css
│ │ └── mermaid.forest.css
│ ├── gitbook-plugin-prism/
│ │ ├── prism-a11y-dark.css
│ │ ├── prism-atom-dark.css
│ │ ├── prism-base16-ateliersulphurpool.light.css
│ │ ├── prism-cb.css
│ │ ├── prism-darcula.css
│ │ ├── prism-dracula.css
│ │ ├── prism-duotone-dark.css
│ │ ├── prism-duotone-earth.css
│ │ ├── prism-duotone-forest.css
│ │ ├── prism-duotone-light.css
│ │ ├── prism-duotone-sea.css
│ │ ├── prism-duotone-space.css
│ │ ├── prism-ghcolors.css
│ │ ├── prism-hopscotch.css
│ │ ├── prism-material-dark.css
│ │ ├── prism-material-light.css
│ │ ├── prism-material-oceanic.css
│ │ ├── prism-pojoaque.css
│ │ ├── prism-shades-of-purple.css
│ │ ├── prism-synthwave84.css
│ │ ├── prism-vs.css
│ │ └── prism-xonokai.css
│ ├── gitbook.js
│ ├── style.css
│ └── theme.js
├── index.html
├── ko/
│ ├── awesome/
│ │ ├── ads.html
│ │ └── tools.html
│ ├── configuration/
│ │ ├── api.html
│ │ ├── dns.html
│ │ ├── env.html
│ │ ├── index.html
│ │ ├── mux.html
│ │ ├── overview.html
│ │ ├── policy.html
│ │ ├── protocols/
│ │ │ ├── blackhole.html
│ │ │ ├── dns.html
│ │ │ ├── dokodemo.html
│ │ │ ├── freedom.html
│ │ │ ├── http.html
│ │ │ ├── mtproto.html
│ │ │ ├── shadowsocks.html
│ │ │ ├── socks.html
│ │ │ └── vmess.html
│ │ ├── protocols.html
│ │ ├── reverse.html
│ │ ├── routing.html
│ │ ├── stats.html
│ │ ├── transport/
│ │ │ ├── domainsocket.html
│ │ │ ├── h2.html
│ │ │ ├── mkcp.html
│ │ │ ├── quic.html
│ │ │ ├── tcp.html
│ │ │ └── websocket.html
│ │ └── transport.html
│ ├── developer/
│ │ └── tools.html
│ ├── gitbook/
│ │ ├── fonts/
│ │ │ └── fontawesome/
│ │ │ └── FontAwesome.otf
│ │ ├── gitbook-plugin-anchors/
│ │ │ └── plugin.css
│ │ ├── gitbook-plugin-ga/
│ │ │ └── plugin.js
│ │ ├── gitbook-plugin-hints/
│ │ │ └── plugin-hints.css
│ │ ├── gitbook-plugin-mermaid-gb3/
│ │ │ ├── book/
│ │ │ │ └── plugin.js
│ │ │ └── mermaid/
│ │ │ ├── mermaid.css
│ │ │ └── mermaid.forest.css
│ │ ├── gitbook-plugin-prism/
│ │ │ ├── prism-a11y-dark.css
│ │ │ ├── prism-atom-dark.css
│ │ │ ├── prism-base16-ateliersulphurpool.light.css
│ │ │ ├── prism-cb.css
│ │ │ ├── prism-darcula.css
│ │ │ ├── prism-dracula.css
│ │ │ ├── prism-duotone-dark.css
│ │ │ ├── prism-duotone-earth.css
│ │ │ ├── prism-duotone-forest.css
│ │ │ ├── prism-duotone-light.css
│ │ │ ├── prism-duotone-sea.css
│ │ │ ├── prism-duotone-space.css
│ │ │ ├── prism-ghcolors.css
│ │ │ ├── prism-hopscotch.css
│ │ │ ├── prism-material-dark.css
│ │ │ ├── prism-material-light.css
│ │ │ ├── prism-material-oceanic.css
│ │ │ ├── prism-pojoaque.css
│ │ │ ├── prism-shades-of-purple.css
│ │ │ ├── prism-synthwave84.css
│ │ │ ├── prism-vs.css
│ │ │ └── prism-xonokai.css
│ │ ├── gitbook.js
│ │ ├── style.css
│ │ └── theme.js
│ ├── index.html
│ ├── styles/
│ │ └── website.css
│ ├── ui_client/
│ │ ├── README.md
│ │ ├── android.md
│ │ ├── ios.md
│ │ ├── osx.md
│ │ ├── service.md
│ │ └── windows.md
│ └── welcome/
│ ├── command.html
│ ├── donate.html
│ ├── faq.html
│ ├── help.html
│ ├── install.html
│ ├── start.html
│ ├── versions.html
│ └── workflow.html
├── links/
│ └── chinasites/
│ └── index.html
├── robots.txt
├── ru/
│ ├── awesome/
│ │ ├── ads.html
│ │ └── tools.html
│ ├── configuration/
│ │ ├── api.html
│ │ ├── dns.html
│ │ ├── env.html
│ │ ├── index.html
│ │ ├── mux.html
│ │ ├── overview.html
│ │ ├── policy.html
│ │ ├── protocols/
│ │ │ ├── blackhole.html
│ │ │ ├── dns.html
│ │ │ ├── dokodemo.html
│ │ │ ├── freedom.html
│ │ │ ├── http.html
│ │ │ ├── mtproto.html
│ │ │ ├── shadowsocks.html
│ │ │ ├── socks.html
│ │ │ └── vmess.html
│ │ ├── protocols.html
│ │ ├── reverse.html
│ │ ├── routing.html
│ │ ├── stats.html
│ │ ├── transport/
│ │ │ ├── domainsocket.html
│ │ │ ├── h2.html
│ │ │ ├── mkcp.html
│ │ │ ├── quic.html
│ │ │ ├── tcp.html
│ │ │ └── websocket.html
│ │ └── transport.html
│ ├── developer/
│ │ └── tools.html
│ ├── gitbook/
│ │ ├── fonts/
│ │ │ └── fontawesome/
│ │ │ └── FontAwesome.otf
│ │ ├── gitbook-plugin-anchors/
│ │ │ └── plugin.css
│ │ ├── gitbook-plugin-ga/
│ │ │ └── plugin.js
│ │ ├── gitbook-plugin-hints/
│ │ │ └── plugin-hints.css
│ │ ├── gitbook-plugin-mermaid-gb3/
│ │ │ ├── book/
│ │ │ │ └── plugin.js
│ │ │ └── mermaid/
│ │ │ ├── mermaid.css
│ │ │ └── mermaid.forest.css
│ │ ├── gitbook-plugin-prism/
│ │ │ ├── prism-a11y-dark.css
│ │ │ ├── prism-atom-dark.css
│ │ │ ├── prism-base16-ateliersulphurpool.light.css
│ │ │ ├── prism-cb.css
│ │ │ ├── prism-darcula.css
│ │ │ ├── prism-dracula.css
│ │ │ ├── prism-duotone-dark.css
│ │ │ ├── prism-duotone-earth.css
│ │ │ ├── prism-duotone-forest.css
│ │ │ ├── prism-duotone-light.css
│ │ │ ├── prism-duotone-sea.css
│ │ │ ├── prism-duotone-space.css
│ │ │ ├── prism-ghcolors.css
│ │ │ ├── prism-hopscotch.css
│ │ │ ├── prism-material-dark.css
│ │ │ ├── prism-material-light.css
│ │ │ ├── prism-material-oceanic.css
│ │ │ ├── prism-pojoaque.css
│ │ │ ├── prism-shades-of-purple.css
│ │ │ ├── prism-synthwave84.css
│ │ │ ├── prism-vs.css
│ │ │ └── prism-xonokai.css
│ │ ├── gitbook.js
│ │ ├── style.css
│ │ └── theme.js
│ ├── index.html
│ ├── styles/
│ │ └── website.css
│ ├── ui_client/
│ │ ├── README.md
│ │ ├── android.md
│ │ ├── ios.md
│ │ ├── osx.md
│ │ ├── service.md
│ │ └── windows.md
│ └── welcome/
│ ├── command.html
│ ├── donate.html
│ ├── faq.html
│ ├── help.html
│ ├── install.html
│ ├── license.md
│ ├── pgp.md
│ ├── start.html
│ ├── tg.md
│ ├── versions.html
│ └── workflow.html
├── styles/
│ └── website.css
└── vi/
├── awesome/
│ ├── ads.html
│ └── tools.html
├── configuration/
│ ├── api.html
│ ├── dns.html
│ ├── env.html
│ ├── index.html
│ ├── mux.html
│ ├── overview.html
│ ├── policy.html
│ ├── protocols/
│ │ ├── blackhole.html
│ │ ├── dns.html
│ │ ├── dokodemo.html
│ │ ├── freedom.html
│ │ ├── http.html
│ │ ├── mtproto.html
│ │ ├── shadowsocks.html
│ │ ├── socks.html
│ │ └── vmess.html
│ ├── protocols.html
│ ├── reverse.html
│ ├── routing.html
│ ├── stats.html
│ ├── transport/
│ │ ├── domainsocket.html
│ │ ├── h2.html
│ │ ├── mkcp.html
│ │ ├── quic.html
│ │ ├── tcp.html
│ │ └── websocket.html
│ └── transport.html
├── developer/
│ └── tools.html
├── gitbook/
│ ├── fonts/
│ │ └── fontawesome/
│ │ └── FontAwesome.otf
│ ├── gitbook-plugin-anchors/
│ │ └── plugin.css
│ ├── gitbook-plugin-ga/
│ │ └── plugin.js
│ ├── gitbook-plugin-hints/
│ │ └── plugin-hints.css
│ ├── gitbook-plugin-mermaid-gb3/
│ │ ├── book/
│ │ │ └── plugin.js
│ │ └── mermaid/
│ │ ├── mermaid.css
│ │ └── mermaid.forest.css
│ ├── gitbook-plugin-prism/
│ │ ├── prism-a11y-dark.css
│ │ ├── prism-atom-dark.css
│ │ ├── prism-base16-ateliersulphurpool.light.css
│ │ ├── prism-cb.css
│ │ ├── prism-darcula.css
│ │ ├── prism-dracula.css
│ │ ├── prism-duotone-dark.css
│ │ ├── prism-duotone-earth.css
│ │ ├── prism-duotone-forest.css
│ │ ├── prism-duotone-light.css
│ │ ├── prism-duotone-sea.css
│ │ ├── prism-duotone-space.css
│ │ ├── prism-ghcolors.css
│ │ ├── prism-hopscotch.css
│ │ ├── prism-material-dark.css
│ │ ├── prism-material-light.css
│ │ ├── prism-material-oceanic.css
│ │ ├── prism-pojoaque.css
│ │ ├── prism-shades-of-purple.css
│ │ ├── prism-synthwave84.css
│ │ ├── prism-vs.css
│ │ └── prism-xonokai.css
│ ├── gitbook.js
│ ├── style.css
│ └── theme.js
├── index.html
├── styles/
│ └── website.css
├── ui_client/
│ ├── README.md
│ ├── android.md
│ ├── ios.md
│ ├── osx.md
│ ├── service.md
│ └── windows.md
└── welcome/
├── command.html
├── donate.html
├── faq.html
├── help.html
├── install.html
├── start.html
├── versions.html
└── workflow.html
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
.git
.cache
================================================
FILE: CNAME
================================================
www.v2ray.com
================================================
FILE: awesome/ads.html
================================================
<!DOCTYPE HTML>
<html lang="zh" >
<head>
<meta charset="UTF-8">
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<title>以及广告 · Project V 官方网站</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<script type="text/javascript">
function inIframe () {
try { return window.self !== window.top; } catch (e) { return true; }
}
function isValidDomain() {
var host = window.location.hostname;
var domains = ['v2ray.com', 'github.io', 'mux.cool', 'v2ray.cool', 'archive.org'];
for (var dx in domains) {
if (host.indexOf(domains[dx]) >= 0) {
return true;
}
}
return false;
}
if (inIframe() || !isValidDomain()) {
window.top.location.href = 'https://www.v2ray.com/';
}
</script>
<link rel="stylesheet" href="../gitbook/style.css">
<link rel="stylesheet" href="../gitbook/gitbook-plugin-mermaid-gb3/mermaid/mermaid.css">
<link rel="stylesheet" href="../gitbook/gitbook-plugin-anchors/plugin.css">
<link rel="stylesheet" href="../gitbook/gitbook-plugin-prism/prism-base16-ateliersulphurpool.light.css">
<link rel="stylesheet" href="../gitbook/gitbook-plugin-hints/plugin-hints.css">
<link rel="stylesheet" href="../styles/website.css">
<meta name="HandheldFriendly" content="true"/>
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<link rel="apple-touch-icon-precomposed" sizes="152x152" type="image/png" href="/resources/favicon-152.png">
<link rel="apple-touch-icon-precomposed" sizes="180x180" type="image/png" href="/resources/favicon-180.png">
<link rel="icon" type="image/png" href="/resources/favicon-192.png">
<link rel="shortcut icon" href="/resources/favicon.ico" type="image/x-icon">
<link href="https://fonts.loli.net/css?family=Source+Code+Pro:400|Open+Sans:400,700&subset=cyrillic" rel="stylesheet">
<link rel="next" href="../developer/" />
<link rel="prev" href="tools.html" />
</head>
<body>
<div class="book">
<div class="book-summary">
<nav role="navigation">
<ul class="summary">
<li class="chapter " data-level="1.1" data-path="../">
<a href="../">
Project V
</a>
<ul class="articles">
<li class="chapter " data-level="1.1.1" data-path="../chapter_00/01_versions.html">
<a href="../chapter_00/01_versions.html">
版本历史
</a>
</li>
<li class="chapter " data-level="1.1.2" data-path="../chapter_00/workflow.html">
<a href="../chapter_00/workflow.html">
使用方式
</a>
</li>
<li class="chapter " data-level="1.1.3" data-path="../chapter_00/install.html">
<a href="../chapter_00/install.html">
下载安装
</a>
</li>
<li class="chapter " data-level="1.1.4" data-path="../chapter_00/start.html">
<a href="../chapter_00/start.html">
新手上路
</a>
</li>
<li class="chapter " data-level="1.1.5" data-path="../chapter_00/command.html">
<a href="../chapter_00/command.html">
命令行参数
</a>
</li>
<li class="chapter " data-level="1.1.6" data-path="../chapter_00/02_donate.html">
<a href="../chapter_00/02_donate.html">
捐助支持
</a>
</li>
<li class="chapter " data-level="1.1.7" data-path="../chapter_00/help.html">
<a href="../chapter_00/help.html">
寻求帮助
</a>
</li>
<li class="chapter " data-level="1.1.8" data-path="../chapter_00/faq.html">
<a href="../chapter_00/faq.html">
常见问题
</a>
</li>
<li class="chapter " data-level="1.1.9" >
<a target="_blank" href="https://steemit.com/@v2ray">
博客↪
</a>
</li>
<li class="chapter " data-level="1.1.10" >
<a target="_blank" href="https://toutyrater.github.io/">
白话文教程↪
</a>
</li>
<li class="chapter " data-level="1.1.11" >
<a target="_blank" href="https://guide.v2fly.org/">
新白话文教程(社区版)↪
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.2" data-path="../chapter_02/">
<a href="../chapter_02/">
配置文件
</a>
<ul class="articles">
<li class="chapter " data-level="1.2.1" data-path="../chapter_02/01_overview.html">
<a href="../chapter_02/01_overview.html">
文件格式
</a>
</li>
<li class="chapter " data-level="1.2.2" data-path="../chapter_02/02_protocols.html">
<a href="../chapter_02/02_protocols.html">
协议列表
</a>
<ul class="articles">
<li class="chapter " data-level="1.2.2.1" data-path="../chapter_02/protocols/blackhole.html">
<a href="../chapter_02/protocols/blackhole.html">
Blackhole
</a>
</li>
<li class="chapter " data-level="1.2.2.2" data-path="../chapter_02/protocols/dns.html">
<a href="../chapter_02/protocols/dns.html">
DNS
</a>
</li>
<li class="chapter " data-level="1.2.2.3" data-path="../chapter_02/protocols/dokodemo.html">
<a href="../chapter_02/protocols/dokodemo.html">
Dokodemo
</a>
</li>
<li class="chapter " data-level="1.2.2.4" data-path="../chapter_02/protocols/freedom.html">
<a href="../chapter_02/protocols/freedom.html">
Freedom
</a>
</li>
<li class="chapter " data-level="1.2.2.5" data-path="../chapter_02/protocols/http.html">
<a href="../chapter_02/protocols/http.html">
HTTP
</a>
</li>
<li class="chapter " data-level="1.2.2.6" data-path="../chapter_02/protocols/mtproto.html">
<a href="../chapter_02/protocols/mtproto.html">
MTProto
</a>
</li>
<li class="chapter " data-level="1.2.2.7" data-path="../chapter_02/protocols/shadowsocks.html">
<a href="../chapter_02/protocols/shadowsocks.html">
Shadowsocks
</a>
</li>
<li class="chapter " data-level="1.2.2.8" data-path="../chapter_02/protocols/socks.html">
<a href="../chapter_02/protocols/socks.html">
SOCKS
</a>
</li>
<li class="chapter " data-level="1.2.2.9" data-path="../chapter_02/protocols/vmess.html">
<a href="../chapter_02/protocols/vmess.html">
VMess
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.2.3" data-path="../chapter_02/policy.html">
<a href="../chapter_02/policy.html">
本地策略
</a>
</li>
<li class="chapter " data-level="1.2.4" data-path="../chapter_02/03_routing.html">
<a href="../chapter_02/03_routing.html">
路由配置
</a>
</li>
<li class="chapter " data-level="1.2.5" data-path="../chapter_02/04_dns.html">
<a href="../chapter_02/04_dns.html">
DNS 配置
</a>
</li>
<li class="chapter " data-level="1.2.6" data-path="../chapter_02/mux.html">
<a href="../chapter_02/mux.html">
Mux 配置
</a>
</li>
<li class="chapter " data-level="1.2.7" data-path="../chapter_02/api.html">
<a href="../chapter_02/api.html">
API 配置
</a>
</li>
<li class="chapter " data-level="1.2.8" data-path="../chapter_02/stats.html">
<a href="../chapter_02/stats.html">
统计信息
</a>
</li>
<li class="chapter " data-level="1.2.9" data-path="../chapter_02/reverse.html">
<a href="../chapter_02/reverse.html">
反向代理
</a>
</li>
<li class="chapter " data-level="1.2.10" data-path="../chapter_02/05_transport.html">
<a href="../chapter_02/05_transport.html">
传输配置
</a>
<ul class="articles">
<li class="chapter " data-level="1.2.10.1" data-path="../chapter_02/transport/tcp.html">
<a href="../chapter_02/transport/tcp.html">
TCP
</a>
</li>
<li class="chapter " data-level="1.2.10.2" data-path="../chapter_02/transport/mkcp.html">
<a href="../chapter_02/transport/mkcp.html">
mKCP
</a>
</li>
<li class="chapter " data-level="1.2.10.3" data-path="../chapter_02/transport/websocket.html">
<a href="../chapter_02/transport/websocket.html">
WebSocket
</a>
</li>
<li class="chapter " data-level="1.2.10.4" data-path="../chapter_02/transport/h2.html">
<a href="../chapter_02/transport/h2.html">
HTTP/2
</a>
</li>
<li class="chapter " data-level="1.2.10.5" data-path="../chapter_02/transport/domainsocket.html">
<a href="../chapter_02/transport/domainsocket.html">
DomainSocket
</a>
</li>
<li class="chapter " data-level="1.2.10.6" data-path="../chapter_02/transport/quic.html">
<a href="../chapter_02/transport/quic.html">
QUIC
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.2.11" data-path="../chapter_02/env.html">
<a href="../chapter_02/env.html">
环境变量
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.3" data-path="tools.html">
<a href="tools.html">
神一样的工具们
</a>
<ul class="articles">
<li class="chapter active" data-level="1.3.1" data-path="ads.html">
<a href="ads.html">
以及广告
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.4" data-path="../developer/">
<a href="../developer/">
开发人员手册
</a>
<ul class="articles">
<li class="chapter " data-level="1.4.1" data-path="../developer/intro/roadmap.html">
<a href="../developer/intro/roadmap.html">
开发计划
</a>
</li>
<li class="chapter " data-level="1.4.2" data-path="../developer/intro/guide.html">
<a href="../developer/intro/guide.html">
开发指引
</a>
</li>
<li class="chapter " data-level="1.4.3" data-path="../developer/intro/design.html">
<a href="../developer/intro/design.html">
核心设计
</a>
</li>
<li class="chapter " data-level="1.4.4" data-path="../developer/intro/compile.html">
<a href="../developer/intro/compile.html">
配置开发环境
</a>
</li>
<li class="chapter " data-level="1.4.5" data-path="../developer/intro/tools.html">
<a href="../developer/intro/tools.html">
开发工具
</a>
</li>
<li class="chapter " data-level="1.4.6" >
<span>
协议细节
</span>
<ul class="articles">
<li class="chapter " data-level="1.4.6.1" data-path="../developer/protocols/vmess.html">
<a href="../developer/protocols/vmess.html">
VMess 协议
</a>
</li>
<li class="chapter " data-level="1.4.6.2" data-path="../developer/protocols/mkcp.html">
<a href="../developer/protocols/mkcp.html">
mKCP 协议
</a>
</li>
<li class="chapter " data-level="1.4.6.3" data-path="../developer/protocols/muxcool.html">
<a href="../developer/protocols/muxcool.html">
Mux.Cool
</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="divider"></li>
<li>
<a href="https://www.gitbook.com" target="blank" class="gitbook-link">
本書使用 GitBook 釋出
</a>
</li>
</ul>
</nav>
</div>
<div class="book-body">
<div class="body-inner">
<div class="book-header" role="navigation">
<a class="btn pull-left" href="/awesome/ads.html" target="_blank">
<img src="/resources/flag_cn.svg" alt="Chinese" height="16">
</a>
<a class="btn pull-left" href="/en/awesome/ads.html" target="_blank">
<img src="/resources/flag_en.svg" alt="English" height="16">
</a>
<a class="btn pull-left" href="/ru/awesome/ads.html" target="_blank">
<img src="/resources/flag_ru.svg" alt="Russian" height="16">
</a>
<a class="btn pull-left" href="/ko/awesome/ads.html" target="_blank">
<img src="/resources/flag_ko.svg" alt="Korean" height="16">
</a>
<a class="btn pull-left" href="/fa/awesome/ads.html" target="_blank">
<img src="/resources/flag_fa.svg" alt="Persian" height="16">
</a>
<a class="btn pull-left" href="/vi/awesome/ads.html" target="_blank">
<img src="/resources/flag_vi.svg" alt="Vietnamese" height="16">
</a>
<a class="btn pull-left" href="https://crowdin.com/project/v2ray" target="_blank">
<img src="/resources/translate.png" alt="Translate" height="16">
</a>
</div>
<div class="page-wrapper" tabindex="-1" role="main">
<div class="page-inner">
<section class="normal markdown-section">
<h1 id="一些推广"><a name="一些推广" class="plugin-anchor" href="#一些推广"><i class="fa fa-link" aria-hidden="true"></i></a>一些推广</h1>
<p>以下服务均由第三方提供,和 Project V 没有利益关系,但它们可能会帮助你更好地使用 Project V。</p>
<h2 id="hosting"><a name="hosting" class="plugin-anchor" href="#hosting"><i class="fa fa-link" aria-hidden="true"></i></a>自建代理 </h2>
<blockquote>
<p><a href="https://letsencrypt.org/" target="_blank">Let's Encrypt</a></p>
</blockquote>
<p>Let's Encrypt是一个于2015年三季度推出的数字证书认证机构,旨在以自动化流程消除手动创建和安装证书的复杂流程,并推广使万维网服务器的加密连接无所不在,为安全网站提供免费的SSL/TLS证书。</p>
<blockquote>
<p><a href="https://www.vultr.com/?ref=7269307" target="_blank">Vultr</a></p>
</blockquote>
<p>Vultr 是一家提供日本、美国、欧洲等多个国家和地区机房的 VPS 主机商,价格低至 2.5 美元/月。Vultr 根据VPS使用小时来计费,使用多长时间就算多长时间,计费对应的款,并且支持支付宝(Alipay)付费。</p>
<blockquote>
<p><a href="https://www.bluehost.com/track/v2ray/" target="_blank">BlueHost</a></p>
</blockquote>
<p>BlueHost作为美国的老牌主机商,在国内也是非常受欢迎的美国主机之一。以稳定性强。速度快著称,在站长中的口碑和流行度也是非常之高。BlueHost主机商为了开拓国内市场,自2014年就推出了中文站,而且也极大的丰富了主机产品,可以满足大多数站长的建站需求。</p>
<blockquote>
<p><a href="https://www.cloudns.net/aff/id/244749/" target="_blank">ClouDNS</a></p>
</blockquote>
<p>ClouDNS成立于2010年,公司位于保加利亚,提供免费和收费的 DNS 托管服务。</p>
<blockquote>
<p><a href="https://bandwagonhost.com/aff.php?aff=44317" target="_blank">Bandwagon</a></p>
</blockquote>
<p>老牌 VPS 销售商,价格低廉,性价比高。</p>
<h2 id="vpn"><a name="vpn" class="plugin-anchor" href="#vpn"><i class="fa fa-link" aria-hidden="true"></i></a>VPN</h2>
<blockquote>
<p><a href="http://babydriver.me/" target="_blank">BabyDriver</a></p>
</blockquote>
<p>支持 V2Ray 的 VPN 服务。优惠码:bcb518</p>
<blockquote>
<p><a href="https://xn--i2ru8q2qg.com/" target="_blank">喵帕斯</a></p>
</blockquote>
<p>V2Ray 小范围内测中。</p>
<blockquote>
<p><a href="https://xn--sjt174g.com/" target="_blank">蓝岸</a></p>
</blockquote>
<p>基于 V2Ray 的网络加速服务。优惠码:v2ray</p>
<blockquote>
<p><a href="http://v2net.org/" target="_blank">V2Net</a></p>
</blockquote>
<p>提供專屬客戶端的V2Ray服務。9折促銷代碼: v2ray.com</p>
<blockquote>
<p><a href="https://niconode.co/" target="_blank">NicoNode</a></p>
</blockquote>
<p>支持 V2Ray 的网络加速改善服务。专属促销代码:V2RAYNOW</p>
<h2 id="crypto"><a name="crypto" class="plugin-anchor" href="#crypto"><i class="fa fa-link" aria-hidden="true"></i></a>数字货币 </h2>
<blockquote>
<p><a href="https://localbitcoins.com/?ch=khtm" target="_blank">LocalBitcoins</a></p>
</blockquote>
<p>线下交易比特币</p>
<blockquote>
<p><a href="https://www.coincola.com/mobile/signup?ref=QAcvfy2g" target="_blank">CoinCola</a></p>
</blockquote>
<p>CoinCola 是香港场外交易平台,支持简体中文界面,买卖方几乎都是国人。网页和APP均操作流畅。订单使用支付宝、网银、微信支付,像淘宝购物一样买卖比特币。现支持BTC、ETH、BCH、USDT等货币。</p>
<blockquote>
<p><a href="https://www.binance.com/?ref=35382451" target="_blank">币安</a></p>
</blockquote>
<p>数字货币交易所</p>
<blockquote>
<p><a href="https://www.coinex.com/account/signup?refer_code=r3fmp" target="_blank">Coinex</a></p>
</blockquote>
<p>数字货币交易所</p>
<blockquote>
<p><a href="https://www.coinpayments.net/index.php?ref=abc5f542afed6b37b4b3d7fb83242d18" target="_blank">CoinPayment</a></p>
</blockquote>
<p>在线数字货币钱包</p>
</section>
</div>
</div>
</div>
</div>
<script>
var gitbook = gitbook || [];
gitbook.push(function() {
gitbook.page.hasChanged({"page":{"refcn":"awesome/ads","refen":"awesome/ads","title":"以及广告","level":"1.3.1","depth":2,"next":{"title":"开发人员手册","level":"1.4","depth":1,"path":"developer/README.md","ref":"developer/README.md","articles":[{"title":"开发计划","level":"1.4.1","depth":2,"path":"developer/intro/roadmap.md","ref":"developer/intro/roadmap.md","articles":[]},{"title":"开发指引","level":"1.4.2","depth":2,"path":"developer/intro/guide.md","ref":"developer/intro/guide.md","articles":[]},{"title":"核心设计","level":"1.4.3","depth":2,"path":"developer/intro/design.md","ref":"developer/intro/design.md","articles":[]},{"title":"配置开发环境","level":"1.4.4","depth":2,"path":"developer/intro/compile.md","ref":"developer/intro/compile.md","articles":[]},{"title":"开发工具","level":"1.4.5","depth":2,"path":"developer/intro/tools.md","ref":"developer/intro/tools.md","articles":[]},{"title":"协议细节","level":"1.4.6","depth":2,"ref":"","articles":[{"title":"VMess 协议","level":"1.4.6.1","depth":3,"path":"developer/protocols/vmess.md","ref":"developer/protocols/vmess.md","articles":[]},{"title":"mKCP 协议","level":"1.4.6.2","depth":3,"path":"developer/protocols/mkcp.md","ref":"developer/protocols/mkcp.md","articles":[]},{"title":"Mux.Cool","level":"1.4.6.3","depth":3,"path":"developer/protocols/muxcool.md","ref":"developer/protocols/muxcool.md","articles":[]}]}]},"previous":{"title":"神一样的工具们","level":"1.3","depth":1,"path":"awesome/tools.md","ref":"awesome/tools.md","articles":[{"title":"以及广告","level":"1.3.1","depth":2,"path":"awesome/ads.md","ref":"awesome/ads.md","articles":[]}]},"dir":"ltr"},"config":{"plugins":["-fontsettings","-search","-lunr","-highlight","-sharing","mermaid-gb3","anchors","ga","prism","prism-themes","hints"],"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"pluginsConfig":{"ga":{"configuration":"auto","token":"UA-73620536-1"},"prism":{"css":["prism-themes/themes/prism-base16-ateliersulphurpool.light.css"],"lang":{"objc":"objectivec","shell":"bash","text":"textile","plain":"textile"}},"mermaid-gb3":{},"anchors":{},"prism-themes":{},"hints":{"danger":"fa fa-exclamation-circle","info":"fa fa-info-circle","tip":"fa fa-mortar-board","working":"fa fa-wrench"},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Project V 官方网站","language":"zh","gitbook":"*"},"file":{"path":"awesome/ads.md","mtime":"2019-12-09T02:03:16.155Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2019-12-09T02:05:14.919Z"},"basePath":"..","book":{"language":""}});
});
</script>
</div>
<script src="../gitbook/gitbook.js"></script>
<script src="../gitbook/theme.js"></script>
<script src="../gitbook/gitbook-plugin-mermaid-gb3/book/plugin.js"></script>
<script src="../gitbook/gitbook-plugin-ga/plugin.js"></script>
<script src="../gitbook/gitbook-plugin-mermaid-gb3/mermaid/mermaid.min.js"></script>
</body>
</html>
================================================
FILE: awesome/tools.html
================================================
<!DOCTYPE HTML>
<html lang="zh" >
<head>
<meta charset="UTF-8">
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<title>神一样的工具们 · Project V 官方网站</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<script type="text/javascript">
function inIframe () {
try { return window.self !== window.top; } catch (e) { return true; }
}
function isValidDomain() {
var host = window.location.hostname;
var domains = ['v2ray.com', 'github.io', 'mux.cool', 'v2ray.cool', 'archive.org'];
for (var dx in domains) {
if (host.indexOf(domains[dx]) >= 0) {
return true;
}
}
return false;
}
if (inIframe() || !isValidDomain()) {
window.top.location.href = 'https://www.v2ray.com/';
}
</script>
<link rel="stylesheet" href="../gitbook/style.css">
<link rel="stylesheet" href="../gitbook/gitbook-plugin-mermaid-gb3/mermaid/mermaid.css">
<link rel="stylesheet" href="../gitbook/gitbook-plugin-anchors/plugin.css">
<link rel="stylesheet" href="../gitbook/gitbook-plugin-prism/prism-base16-ateliersulphurpool.light.css">
<link rel="stylesheet" href="../gitbook/gitbook-plugin-hints/plugin-hints.css">
<link rel="stylesheet" href="../styles/website.css">
<meta name="HandheldFriendly" content="true"/>
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<link rel="apple-touch-icon-precomposed" sizes="152x152" type="image/png" href="/resources/favicon-152.png">
<link rel="apple-touch-icon-precomposed" sizes="180x180" type="image/png" href="/resources/favicon-180.png">
<link rel="icon" type="image/png" href="/resources/favicon-192.png">
<link rel="shortcut icon" href="/resources/favicon.ico" type="image/x-icon">
<link href="https://fonts.loli.net/css?family=Source+Code+Pro:400|Open+Sans:400,700&subset=cyrillic" rel="stylesheet">
<link rel="next" href="ads.html" />
<link rel="prev" href="../chapter_02/env.html" />
</head>
<body>
<div class="book">
<div class="book-summary">
<nav role="navigation">
<ul class="summary">
<li class="chapter " data-level="1.1" data-path="../">
<a href="../">
Project V
</a>
<ul class="articles">
<li class="chapter " data-level="1.1.1" data-path="../chapter_00/01_versions.html">
<a href="../chapter_00/01_versions.html">
版本历史
</a>
</li>
<li class="chapter " data-level="1.1.2" data-path="../chapter_00/workflow.html">
<a href="../chapter_00/workflow.html">
使用方式
</a>
</li>
<li class="chapter " data-level="1.1.3" data-path="../chapter_00/install.html">
<a href="../chapter_00/install.html">
下载安装
</a>
</li>
<li class="chapter " data-level="1.1.4" data-path="../chapter_00/start.html">
<a href="../chapter_00/start.html">
新手上路
</a>
</li>
<li class="chapter " data-level="1.1.5" data-path="../chapter_00/command.html">
<a href="../chapter_00/command.html">
命令行参数
</a>
</li>
<li class="chapter " data-level="1.1.6" data-path="../chapter_00/02_donate.html">
<a href="../chapter_00/02_donate.html">
捐助支持
</a>
</li>
<li class="chapter " data-level="1.1.7" data-path="../chapter_00/help.html">
<a href="../chapter_00/help.html">
寻求帮助
</a>
</li>
<li class="chapter " data-level="1.1.8" data-path="../chapter_00/faq.html">
<a href="../chapter_00/faq.html">
常见问题
</a>
</li>
<li class="chapter " data-level="1.1.9" >
<a target="_blank" href="https://steemit.com/@v2ray">
博客↪
</a>
</li>
<li class="chapter " data-level="1.1.10" >
<a target="_blank" href="https://toutyrater.github.io/">
白话文教程↪
</a>
</li>
<li class="chapter " data-level="1.1.11" >
<a target="_blank" href="https://guide.v2fly.org/">
新白话文教程(社区版)↪
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.2" data-path="../chapter_02/">
<a href="../chapter_02/">
配置文件
</a>
<ul class="articles">
<li class="chapter " data-level="1.2.1" data-path="../chapter_02/01_overview.html">
<a href="../chapter_02/01_overview.html">
文件格式
</a>
</li>
<li class="chapter " data-level="1.2.2" data-path="../chapter_02/02_protocols.html">
<a href="../chapter_02/02_protocols.html">
协议列表
</a>
<ul class="articles">
<li class="chapter " data-level="1.2.2.1" data-path="../chapter_02/protocols/blackhole.html">
<a href="../chapter_02/protocols/blackhole.html">
Blackhole
</a>
</li>
<li class="chapter " data-level="1.2.2.2" data-path="../chapter_02/protocols/dns.html">
<a href="../chapter_02/protocols/dns.html">
DNS
</a>
</li>
<li class="chapter " data-level="1.2.2.3" data-path="../chapter_02/protocols/dokodemo.html">
<a href="../chapter_02/protocols/dokodemo.html">
Dokodemo
</a>
</li>
<li class="chapter " data-level="1.2.2.4" data-path="../chapter_02/protocols/freedom.html">
<a href="../chapter_02/protocols/freedom.html">
Freedom
</a>
</li>
<li class="chapter " data-level="1.2.2.5" data-path="../chapter_02/protocols/http.html">
<a href="../chapter_02/protocols/http.html">
HTTP
</a>
</li>
<li class="chapter " data-level="1.2.2.6" data-path="../chapter_02/protocols/mtproto.html">
<a href="../chapter_02/protocols/mtproto.html">
MTProto
</a>
</li>
<li class="chapter " data-level="1.2.2.7" data-path="../chapter_02/protocols/shadowsocks.html">
<a href="../chapter_02/protocols/shadowsocks.html">
Shadowsocks
</a>
</li>
<li class="chapter " data-level="1.2.2.8" data-path="../chapter_02/protocols/socks.html">
<a href="../chapter_02/protocols/socks.html">
SOCKS
</a>
</li>
<li class="chapter " data-level="1.2.2.9" data-path="../chapter_02/protocols/vmess.html">
<a href="../chapter_02/protocols/vmess.html">
VMess
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.2.3" data-path="../chapter_02/policy.html">
<a href="../chapter_02/policy.html">
本地策略
</a>
</li>
<li class="chapter " data-level="1.2.4" data-path="../chapter_02/03_routing.html">
<a href="../chapter_02/03_routing.html">
路由配置
</a>
</li>
<li class="chapter " data-level="1.2.5" data-path="../chapter_02/04_dns.html">
<a href="../chapter_02/04_dns.html">
DNS 配置
</a>
</li>
<li class="chapter " data-level="1.2.6" data-path="../chapter_02/mux.html">
<a href="../chapter_02/mux.html">
Mux 配置
</a>
</li>
<li class="chapter " data-level="1.2.7" data-path="../chapter_02/api.html">
<a href="../chapter_02/api.html">
API 配置
</a>
</li>
<li class="chapter " data-level="1.2.8" data-path="../chapter_02/stats.html">
<a href="../chapter_02/stats.html">
统计信息
</a>
</li>
<li class="chapter " data-level="1.2.9" data-path="../chapter_02/reverse.html">
<a href="../chapter_02/reverse.html">
反向代理
</a>
</li>
<li class="chapter " data-level="1.2.10" data-path="../chapter_02/05_transport.html">
<a href="../chapter_02/05_transport.html">
传输配置
</a>
<ul class="articles">
<li class="chapter " data-level="1.2.10.1" data-path="../chapter_02/transport/tcp.html">
<a href="../chapter_02/transport/tcp.html">
TCP
</a>
</li>
<li class="chapter " data-level="1.2.10.2" data-path="../chapter_02/transport/mkcp.html">
<a href="../chapter_02/transport/mkcp.html">
mKCP
</a>
</li>
<li class="chapter " data-level="1.2.10.3" data-path="../chapter_02/transport/websocket.html">
<a href="../chapter_02/transport/websocket.html">
WebSocket
</a>
</li>
<li class="chapter " data-level="1.2.10.4" data-path="../chapter_02/transport/h2.html">
<a href="../chapter_02/transport/h2.html">
HTTP/2
</a>
</li>
<li class="chapter " data-level="1.2.10.5" data-path="../chapter_02/transport/domainsocket.html">
<a href="../chapter_02/transport/domainsocket.html">
DomainSocket
</a>
</li>
<li class="chapter " data-level="1.2.10.6" data-path="../chapter_02/transport/quic.html">
<a href="../chapter_02/transport/quic.html">
QUIC
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.2.11" data-path="../chapter_02/env.html">
<a href="../chapter_02/env.html">
环境变量
</a>
</li>
</ul>
</li>
<li class="chapter active" data-level="1.3" data-path="tools.html">
<a href="tools.html">
神一样的工具们
</a>
<ul class="articles">
<li class="chapter " data-level="1.3.1" data-path="ads.html">
<a href="ads.html">
以及广告
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.4" data-path="../developer/">
<a href="../developer/">
开发人员手册
</a>
<ul class="articles">
<li class="chapter " data-level="1.4.1" data-path="../developer/intro/roadmap.html">
<a href="../developer/intro/roadmap.html">
开发计划
</a>
</li>
<li class="chapter " data-level="1.4.2" data-path="../developer/intro/guide.html">
<a href="../developer/intro/guide.html">
开发指引
</a>
</li>
<li class="chapter " data-level="1.4.3" data-path="../developer/intro/design.html">
<a href="../developer/intro/design.html">
核心设计
</a>
</li>
<li class="chapter " data-level="1.4.4" data-path="../developer/intro/compile.html">
<a href="../developer/intro/compile.html">
配置开发环境
</a>
</li>
<li class="chapter " data-level="1.4.5" data-path="../developer/intro/tools.html">
<a href="../developer/intro/tools.html">
开发工具
</a>
</li>
<li class="chapter " data-level="1.4.6" >
<span>
协议细节
</span>
<ul class="articles">
<li class="chapter " data-level="1.4.6.1" data-path="../developer/protocols/vmess.html">
<a href="../developer/protocols/vmess.html">
VMess 协议
</a>
</li>
<li class="chapter " data-level="1.4.6.2" data-path="../developer/protocols/mkcp.html">
<a href="../developer/protocols/mkcp.html">
mKCP 协议
</a>
</li>
<li class="chapter " data-level="1.4.6.3" data-path="../developer/protocols/muxcool.html">
<a href="../developer/protocols/muxcool.html">
Mux.Cool
</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="divider"></li>
<li>
<a href="https://www.gitbook.com" target="blank" class="gitbook-link">
本書使用 GitBook 釋出
</a>
</li>
</ul>
</nav>
</div>
<div class="book-body">
<div class="body-inner">
<div class="book-header" role="navigation">
<a class="btn pull-left" href="/awesome/tools.html" target="_blank">
<img src="/resources/flag_cn.svg" alt="Chinese" height="16">
</a>
<a class="btn pull-left" href="/en/awesome/tools.html" target="_blank">
<img src="/resources/flag_en.svg" alt="English" height="16">
</a>
<a class="btn pull-left" href="/ru/awesome/tools.html" target="_blank">
<img src="/resources/flag_ru.svg" alt="Russian" height="16">
</a>
<a class="btn pull-left" href="/ko/awesome/tools.html" target="_blank">
<img src="/resources/flag_ko.svg" alt="Korean" height="16">
</a>
<a class="btn pull-left" href="/fa/awesome/tools.html" target="_blank">
<img src="/resources/flag_fa.svg" alt="Persian" height="16">
</a>
<a class="btn pull-left" href="/vi/awesome/tools.html" target="_blank">
<img src="/resources/flag_vi.svg" alt="Vietnamese" height="16">
</a>
<a class="btn pull-left" href="https://crowdin.com/project/v2ray" target="_blank">
<img src="/resources/translate.png" alt="Translate" height="16">
</a>
</div>
<div class="page-wrapper" tabindex="-1" role="main">
<div class="page-inner">
<section class="normal markdown-section">
<h1 id="神一样的工具们"><a name="神一样的工具们" class="plugin-anchor" href="#神一样的工具们"><i class="fa fa-link" aria-hidden="true"></i></a>神一样的工具们</h1>
<h2 id="windows"><a name="windows" class="plugin-anchor" href="#windows"><i class="fa fa-link" aria-hidden="true"></i></a>图形客户端 </h2>
<blockquote>
<p>V2RayW <img width="20" src="../resources/win.svg"></p>
</blockquote>
<p>V2RayW 是一个基于 V2Ray 内核的 Windows 客户端。用户可以通过界面生成配置文件,并且可以手动更新 V2Ray 内核。下载:<a href="https://github.com/Cenmrev/V2RayW" target="_blank">GitHub</a></p>
<blockquote>
<p>V2RayN <img width="20" src="../resources/win.svg"></p>
</blockquote>
<p>V2RayN 是一个基于 V2Ray 内核的 Windows 客户端。下载:<a href="https://github.com/2dust/v2rayN" target="_blank">GitHub</a></p>
<blockquote>
<p>Clash for Windows <img width="20" src="../resources/win.svg"></p>
</blockquote>
<p>下载:<a href="https://github.com/Fndroid/clash_for_windows_pkg" target="_blank">GitHub</a></p>
<blockquote>
<p>V2RayX <img width="20" src="../resources/apple.svg"></p>
</blockquote>
<p>V2RayX 是一个基于 V2Ray 内核的 Mac OS X 客户端。用户可以通过界面生成配置文件,并且可以手动更新 V2Ray 内核。V2RayX 还可以配置系统代理。下载:<a href="https://github.com/Cenmrev/V2RayX" target="_blank">Github</a></p>
<blockquote>
<p>V2RayU <img width="20" src="../resources/apple.svg"></p>
</blockquote>
<p>V2rayU,基于v2ray核心的mac版客户端,界面友好,使用swift4.2编写,支持vmess,shadowsocks,socks5等服务协议,支持订阅, 支持二维码,剪贴板导入,手动配置,二维码分享等。下载:<a href="https://github.com/yanue/V2rayU" target="_blank">GitHub</a></p>
<blockquote>
<p>V2RayC <img width="20" src="../resources/apple.svg"></p>
</blockquote>
<p>下载:<a href="https://github.com/gssdromen/V2RayC" target="_blank">GitHub</a></p>
<blockquote>
<p>ClashX <img width="20" src="../resources/apple.svg"></p>
</blockquote>
<p>下载:<a href="https://github.com/yichengchen/clashX" target="_blank">GitHub</a></p>
<blockquote>
<p>Qv2ray <img width="20" src="../resources/win.svg"> <img width="20" src="../resources/apple.svg"> <img width="20" src="../resources/linux.svg"></p>
</blockquote>
<p>Qv2ray:使用 Qt 编写的 v2ray 跨平台 GUI (MacOS, Windows, Linux)支持连接导入和编辑,中英文切换</p>
<p>下载:<a href="https://github.com/lhy0403/Qv2ray" target="_blank">GitHub</a></p>
<p>官网:<a href="https://lhy0403.github.io/Qv2ray" target="_blank">https://lhy0403.github.io/Qv2ray</a></p>
<blockquote>
<p>Mellow <img width="20" src="../resources/win.svg"> <img width="20" src="../resources/apple.svg"> <img width="20" src="../resources/linux.svg"></p>
</blockquote>
<p>Mellow 是一个基于规则的全局透明代理工具,可以运行在 Windows、macOS 和 Linux 上,也可以配置成路由器透明代理或代理网关,支持 SOCKS、HTTP、Shadowsocks、VMess 等多种代理协议。</p>
<p>Download: <a href="https://github.com/mellow-io/mellow" target="_blank">Github</a></p>
<blockquote>
<p>Kitsunebi <img width="20" src="../resources/ios.svg"> <img width="20" src="../resources/android.svg"></p>
</blockquote>
<p>Kitsunebi 是一个基于 V2Ray 核心的移动平台应用 (iOS, Android)。它可以创建基于 VMess 或者 Shadowsocks 的 VPN 连接。Kitsunebi 支持导入和导出与 V2Ray 兼容的 JSON 配置。</p>
<p>由于使用 V2Ray 核心,Kitsunebi 几乎支持 V2Ray 的所有功能,比如 Mux 和 mKCP。</p>
<p>下载:<a href="https://itunes.apple.com/us/app/kitsunebi-proxy-utility/id1446584073?mt=8" target="_blank">iTunes</a> | <a href="https://play.google.com/store/apps/details?id=fun.kitsunebi.kitsunebi4android&hl=en_US" target="_blank">Play Store</a></p>
<blockquote>
<p>i2Ray <img width="20" src="../resources/ios.svg"></p>
</blockquote>
<p>i2Ray 是另一款基于 V2Ray 核心的iOS应用。界面简洁易用,适合新手用户使用。同时兼容Shadowrocket和Quantumult格式的规则导入。</p>
<p>下载:<a href="https://itunes.apple.com/us/app/i2ray/id1445270056?mt=8" target="_blank">iTunes</a></p>
<blockquote>
<p>Shadowrocket <img width="20" src="../resources/ios.svg"></p>
</blockquote>
<p>Shadowrocket 是一个通用的 iOS VPN 应用,它支持众多协议,如 Shadowsocks、VMess、SSR 等。</p>
<p>下载:<a href="https://itunes.apple.com/us/app/shadowrocket/id932747118?mt=8" target="_blank">iTunes</a></p>
<blockquote>
<p>Pepi(原名ShadowRay)<img width="20" src="../resources/ios.svg"></p>
</blockquote>
<p>Pepi 是一个兼容 V2Ray 的 iOS 应用,它可以创建基于 VMess 的 VPN 连接,并与 V2Ray 服务器通信。</p>
<p>下载:<a href="https://itunes.apple.com/us/app/pepi/id1283082051?mt=8" target="_blank">iTunes</a></p>
<blockquote>
<p>Quantumult <img width="20" src="../resources/ios.svg"></p>
</blockquote>
<p>下载:<a href="https://itunes.apple.com/us/app/quantumult/id1252015438?mt=8" target="_blank">iTunes</a></p>
<blockquote>
<p>BifrostV <img width="20" src="../resources/android.svg"></p>
</blockquote>
<p>BifrostV 是一个基于 V2Ray 内核的 Android 应用,它支持 VMess、Shadowsocks、Socks 协议。</p>
<p>下载:<a href="https://play.google.com/store/apps/details?id=com.github.dawndiy.bifrostv" target="_blank">Play Store</a> | <a href="https://apkpure.com/bifrostv/com.github.dawndiy.bifrostv" target="_blank">APK Pure</a></p>
<blockquote>
<p>V2RayNG <img width="20" src="../resources/android.svg"></p>
</blockquote>
<p>V2RayNG 是一个基于 V2Ray 内核的 Android 应用,它可以创建基于 VMess 的 VPN 连接。</p>
<p>下载:<a href="https://play.google.com/store/apps/details?id=com.v2ray.ang" target="_blank">Play Store</a> | <a href="https://github.com/2dust/v2rayNG" target="_blank">GitHub</a></p>
<h2 id="online"><a name="online" class="plugin-anchor" href="#online"><i class="fa fa-link" aria-hidden="true"></i></a>在线工具/资源 </h2>
<blockquote>
<p>VeekXT V2Ray配置生成</p>
</blockquote>
<p>支持 4.x 版本的配置文件生成器 <a href="https://www.veekxt.com/utils/v2ray_gen" target="_blank">veekxt.com</a></p>
<blockquote>
<p>V2Ray 配置生成器</p>
</blockquote>
<p>静态 V2Ray 配置文件生成页面 <a href="https://github.com/htfy96/v2ray-config-gen" target="_blank">GitHub</a></p>
<blockquote>
<p>UUID Generator</p>
</blockquote>
<p>VMess User ID 生成工具 <a href="https://www.uuidgenerator.net" target="_blank">uuidgenerator.net</a></p>
<blockquote>
<p>vTemplate 项目仓库</p>
</blockquote>
<p>一个 V2Ray 配置文件模板收集仓库 <a href="https://github.com/KiriKira/vTemplate" target="_blank">GitHub</a></p>
</section>
</div>
</div>
</div>
</div>
<script>
var gitbook = gitbook || [];
gitbook.push(function() {
gitbook.page.hasChanged({"page":{"refcn":"awesome/tools","refen":"awesome/tools","title":"神一样的工具们","level":"1.3","depth":1,"next":{"title":"以及广告","level":"1.3.1","depth":2,"path":"awesome/ads.md","ref":"awesome/ads.md","articles":[]},"previous":{"title":"环境变量","level":"1.2.11","depth":2,"path":"chapter_02/env.md","ref":"chapter_02/env.md","articles":[]},"dir":"ltr"},"config":{"plugins":["-fontsettings","-search","-lunr","-highlight","-sharing","mermaid-gb3","anchors","ga","prism","prism-themes","hints"],"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"pluginsConfig":{"ga":{"configuration":"auto","token":"UA-73620536-1"},"prism":{"css":["prism-themes/themes/prism-base16-ateliersulphurpool.light.css"],"lang":{"objc":"objectivec","shell":"bash","text":"textile","plain":"textile"}},"mermaid-gb3":{},"anchors":{},"prism-themes":{},"hints":{"danger":"fa fa-exclamation-circle","info":"fa fa-info-circle","tip":"fa fa-mortar-board","working":"fa fa-wrench"},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Project V 官方网站","language":"zh","gitbook":"*"},"file":{"path":"awesome/tools.md","mtime":"2019-12-09T02:03:16.155Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2019-12-09T02:05:14.919Z"},"basePath":"..","book":{"language":""}});
});
</script>
</div>
<script src="../gitbook/gitbook.js"></script>
<script src="../gitbook/theme.js"></script>
<script src="../gitbook/gitbook-plugin-mermaid-gb3/book/plugin.js"></script>
<script src="../gitbook/gitbook-plugin-ga/plugin.js"></script>
<script src="../gitbook/gitbook-plugin-mermaid-gb3/mermaid/mermaid.min.js"></script>
</body>
</html>
================================================
FILE: chapter_00/01_versions.html
================================================
<!DOCTYPE HTML>
<html lang="zh" >
<head>
<meta charset="UTF-8">
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<title>版本历史 · Project V 官方网站</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<script type="text/javascript">
function inIframe () {
try { return window.self !== window.top; } catch (e) { return true; }
}
function isValidDomain() {
var host = window.location.hostname;
var domains = ['v2ray.com', 'github.io', 'mux.cool', 'v2ray.cool', 'archive.org'];
for (var dx in domains) {
if (host.indexOf(domains[dx]) >= 0) {
return true;
}
}
return false;
}
if (inIframe() || !isValidDomain()) {
window.top.location.href = 'https://www.v2ray.com/';
}
</script>
<link rel="stylesheet" href="../gitbook/style.css">
<link rel="stylesheet" href="../gitbook/gitbook-plugin-mermaid-gb3/mermaid/mermaid.css">
<link rel="stylesheet" href="../gitbook/gitbook-plugin-anchors/plugin.css">
<link rel="stylesheet" href="../gitbook/gitbook-plugin-prism/prism-base16-ateliersulphurpool.light.css">
<link rel="stylesheet" href="../gitbook/gitbook-plugin-hints/plugin-hints.css">
<link rel="stylesheet" href="../styles/website.css">
<meta name="HandheldFriendly" content="true"/>
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<link rel="apple-touch-icon-precomposed" sizes="152x152" type="image/png" href="/resources/favicon-152.png">
<link rel="apple-touch-icon-precomposed" sizes="180x180" type="image/png" href="/resources/favicon-180.png">
<link rel="icon" type="image/png" href="/resources/favicon-192.png">
<link rel="shortcut icon" href="/resources/favicon.ico" type="image/x-icon">
<link href="https://fonts.loli.net/css?family=Source+Code+Pro:400|Open+Sans:400,700&subset=cyrillic" rel="stylesheet">
<link rel="next" href="workflow.html" />
<link rel="prev" href="../" />
</head>
<body>
<div class="book">
<div class="book-summary">
<nav role="navigation">
<ul class="summary">
<li class="chapter " data-level="1.1" data-path="../">
<a href="../">
Project V
</a>
<ul class="articles">
<li class="chapter active" data-level="1.1.1" data-path="01_versions.html">
<a href="01_versions.html">
版本历史
</a>
</li>
<li class="chapter " data-level="1.1.2" data-path="workflow.html">
<a href="workflow.html">
使用方式
</a>
</li>
<li class="chapter " data-level="1.1.3" data-path="install.html">
<a href="install.html">
下载安装
</a>
</li>
<li class="chapter " data-level="1.1.4" data-path="start.html">
<a href="start.html">
新手上路
</a>
</li>
<li class="chapter " data-level="1.1.5" data-path="command.html">
<a href="command.html">
命令行参数
</a>
</li>
<li class="chapter " data-level="1.1.6" data-path="02_donate.html">
<a href="02_donate.html">
捐助支持
</a>
</li>
<li class="chapter " data-level="1.1.7" data-path="help.html">
<a href="help.html">
寻求帮助
</a>
</li>
<li class="chapter " data-level="1.1.8" data-path="faq.html">
<a href="faq.html">
常见问题
</a>
</li>
<li class="chapter " data-level="1.1.9" >
<a target="_blank" href="https://steemit.com/@v2ray">
博客↪
</a>
</li>
<li class="chapter " data-level="1.1.10" >
<a target="_blank" href="https://toutyrater.github.io/">
白话文教程↪
</a>
</li>
<li class="chapter " data-level="1.1.11" >
<a target="_blank" href="https://guide.v2fly.org/">
新白话文教程(社区版)↪
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.2" data-path="../chapter_02/">
<a href="../chapter_02/">
配置文件
</a>
<ul class="articles">
<li class="chapter " data-level="1.2.1" data-path="../chapter_02/01_overview.html">
<a href="../chapter_02/01_overview.html">
文件格式
</a>
</li>
<li class="chapter " data-level="1.2.2" data-path="../chapter_02/02_protocols.html">
<a href="../chapter_02/02_protocols.html">
协议列表
</a>
<ul class="articles">
<li class="chapter " data-level="1.2.2.1" data-path="../chapter_02/protocols/blackhole.html">
<a href="../chapter_02/protocols/blackhole.html">
Blackhole
</a>
</li>
<li class="chapter " data-level="1.2.2.2" data-path="../chapter_02/protocols/dns.html">
<a href="../chapter_02/protocols/dns.html">
DNS
</a>
</li>
<li class="chapter " data-level="1.2.2.3" data-path="../chapter_02/protocols/dokodemo.html">
<a href="../chapter_02/protocols/dokodemo.html">
Dokodemo
</a>
</li>
<li class="chapter " data-level="1.2.2.4" data-path="../chapter_02/protocols/freedom.html">
<a href="../chapter_02/protocols/freedom.html">
Freedom
</a>
</li>
<li class="chapter " data-level="1.2.2.5" data-path="../chapter_02/protocols/http.html">
<a href="../chapter_02/protocols/http.html">
HTTP
</a>
</li>
<li class="chapter " data-level="1.2.2.6" data-path="../chapter_02/protocols/mtproto.html">
<a href="../chapter_02/protocols/mtproto.html">
MTProto
</a>
</li>
<li class="chapter " data-level="1.2.2.7" data-path="../chapter_02/protocols/shadowsocks.html">
<a href="../chapter_02/protocols/shadowsocks.html">
Shadowsocks
</a>
</li>
<li class="chapter " data-level="1.2.2.8" data-path="../chapter_02/protocols/socks.html">
<a href="../chapter_02/protocols/socks.html">
SOCKS
</a>
</li>
<li class="chapter " data-level="1.2.2.9" data-path="../chapter_02/protocols/vmess.html">
<a href="../chapter_02/protocols/vmess.html">
VMess
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.2.3" data-path="../chapter_02/policy.html">
<a href="../chapter_02/policy.html">
本地策略
</a>
</li>
<li class="chapter " data-level="1.2.4" data-path="../chapter_02/03_routing.html">
<a href="../chapter_02/03_routing.html">
路由配置
</a>
</li>
<li class="chapter " data-level="1.2.5" data-path="../chapter_02/04_dns.html">
<a href="../chapter_02/04_dns.html">
DNS 配置
</a>
</li>
<li class="chapter " data-level="1.2.6" data-path="../chapter_02/mux.html">
<a href="../chapter_02/mux.html">
Mux 配置
</a>
</li>
<li class="chapter " data-level="1.2.7" data-path="../chapter_02/api.html">
<a href="../chapter_02/api.html">
API 配置
</a>
</li>
<li class="chapter " data-level="1.2.8" data-path="../chapter_02/stats.html">
<a href="../chapter_02/stats.html">
统计信息
</a>
</li>
<li class="chapter " data-level="1.2.9" data-path="../chapter_02/reverse.html">
<a href="../chapter_02/reverse.html">
反向代理
</a>
</li>
<li class="chapter " data-level="1.2.10" data-path="../chapter_02/05_transport.html">
<a href="../chapter_02/05_transport.html">
传输配置
</a>
<ul class="articles">
<li class="chapter " data-level="1.2.10.1" data-path="../chapter_02/transport/tcp.html">
<a href="../chapter_02/transport/tcp.html">
TCP
</a>
</li>
<li class="chapter " data-level="1.2.10.2" data-path="../chapter_02/transport/mkcp.html">
<a href="../chapter_02/transport/mkcp.html">
mKCP
</a>
</li>
<li class="chapter " data-level="1.2.10.3" data-path="../chapter_02/transport/websocket.html">
<a href="../chapter_02/transport/websocket.html">
WebSocket
</a>
</li>
<li class="chapter " data-level="1.2.10.4" data-path="../chapter_02/transport/h2.html">
<a href="../chapter_02/transport/h2.html">
HTTP/2
</a>
</li>
<li class="chapter " data-level="1.2.10.5" data-path="../chapter_02/transport/domainsocket.html">
<a href="../chapter_02/transport/domainsocket.html">
DomainSocket
</a>
</li>
<li class="chapter " data-level="1.2.10.6" data-path="../chapter_02/transport/quic.html">
<a href="../chapter_02/transport/quic.html">
QUIC
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.2.11" data-path="../chapter_02/env.html">
<a href="../chapter_02/env.html">
环境变量
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.3" data-path="../awesome/tools.html">
<a href="../awesome/tools.html">
神一样的工具们
</a>
<ul class="articles">
<li class="chapter " data-level="1.3.1" data-path="../awesome/ads.html">
<a href="../awesome/ads.html">
以及广告
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.4" data-path="../developer/">
<a href="../developer/">
开发人员手册
</a>
<ul class="articles">
<li class="chapter " data-level="1.4.1" data-path="../developer/intro/roadmap.html">
<a href="../developer/intro/roadmap.html">
开发计划
</a>
</li>
<li class="chapter " data-level="1.4.2" data-path="../developer/intro/guide.html">
<a href="../developer/intro/guide.html">
开发指引
</a>
</li>
<li class="chapter " data-level="1.4.3" data-path="../developer/intro/design.html">
<a href="../developer/intro/design.html">
核心设计
</a>
</li>
<li class="chapter " data-level="1.4.4" data-path="../developer/intro/compile.html">
<a href="../developer/intro/compile.html">
配置开发环境
</a>
</li>
<li class="chapter " data-level="1.4.5" data-path="../developer/intro/tools.html">
<a href="../developer/intro/tools.html">
开发工具
</a>
</li>
<li class="chapter " data-level="1.4.6" >
<span>
协议细节
</span>
<ul class="articles">
<li class="chapter " data-level="1.4.6.1" data-path="../developer/protocols/vmess.html">
<a href="../developer/protocols/vmess.html">
VMess 协议
</a>
</li>
<li class="chapter " data-level="1.4.6.2" data-path="../developer/protocols/mkcp.html">
<a href="../developer/protocols/mkcp.html">
mKCP 协议
</a>
</li>
<li class="chapter " data-level="1.4.6.3" data-path="../developer/protocols/muxcool.html">
<a href="../developer/protocols/muxcool.html">
Mux.Cool
</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="divider"></li>
<li>
<a href="https://www.gitbook.com" target="blank" class="gitbook-link">
本書使用 GitBook 釋出
</a>
</li>
</ul>
</nav>
</div>
<div class="book-body">
<div class="body-inner">
<div class="book-header" role="navigation">
<a class="btn pull-left" href="/chapter_00/01_versions.html" target="_blank">
<img src="/resources/flag_cn.svg" alt="Chinese" height="16">
</a>
<a class="btn pull-left" href="/en/welcome/versions.html" target="_blank">
<img src="/resources/flag_en.svg" alt="English" height="16">
</a>
<a class="btn pull-left" href="/ru/welcome/versions.html" target="_blank">
<img src="/resources/flag_ru.svg" alt="Russian" height="16">
</a>
<a class="btn pull-left" href="/ko/welcome/versions.html" target="_blank">
<img src="/resources/flag_ko.svg" alt="Korean" height="16">
</a>
<a class="btn pull-left" href="/fa/welcome/versions.html" target="_blank">
<img src="/resources/flag_fa.svg" alt="Persian" height="16">
</a>
<a class="btn pull-left" href="/vi/welcome/versions.html" target="_blank">
<img src="/resources/flag_vi.svg" alt="Vietnamese" height="16">
</a>
<a class="btn pull-left" href="https://crowdin.com/project/v2ray" target="_blank">
<img src="/resources/translate.png" alt="Translate" height="16">
</a>
</div>
<div class="page-wrapper" tabindex="-1" role="main">
<div class="page-inner">
<section class="normal markdown-section">
<h1 id="更新日志"><a name="更新日志" class="plugin-anchor" href="#更新日志"><i class="fa fa-link" aria-hidden="true"></i></a>更新日志</h1>
<p>本页列出了常规版本的功能升级记录,未列出的版本通常为 bug 修复。</p>
<h2 id="20190712-v4200"><a name="20190712-v4200" class="plugin-anchor" href="#20190712-v4200"><i class="fa fa-link" aria-hidden="true"></i></a>2019.07.12 v4.20.0</h2>
<ul>
<li>支持H2C(HTTP2不强制TLS)</li>
<li>日志使用none级别时禁用所有显示</li>
<li>修复Bazel 0.26+兼容</li>
<li>一些代码优化</li>
</ul>
<h2 id="20190603-v4191"><a name="20190603-v4191" class="plugin-anchor" href="#20190603-v4191"><i class="fa fa-link" aria-hidden="true"></i></a>2019.06.03 v4.19.1</h2>
<ul>
<li>路由支持自定义文件</li>
<li>安装脚本支持小版本检测</li>
<li>一些代码优化</li>
</ul>
<h2 id="20190518-v4182"><a name="20190518-v4182" class="plugin-anchor" href="#20190518-v4182"><i class="fa fa-link" aria-hidden="true"></i></a>2019.05.18 v4.18.2</h2>
<ul>
<li>修复Windows下配置文件过大读取错误</li>
</ul>
<h2 id="20190415-v4181"><a name="20190415-v4181" class="plugin-anchor" href="#20190415-v4181"><i class="fa fa-link" aria-hidden="true"></i></a>2019.04.15 v4.18.1</h2>
<ul>
<li>支持TLS1.3</li>
<li>修复错误域名导致的崩溃</li>
<li>修改GoCache目录的强制要求</li>
</ul>
<h2 id="20190301-v418"><a name="20190301-v418" class="plugin-anchor" href="#20190301-v418"><i class="fa fa-link" aria-hidden="true"></i></a>2019.03.01 v4.18</h2>
<ul>
<li>路由中的端口列表新增了混合格式。</li>
<li>更新了路由中<code>geosite</code>的说明,和 DNS 服务器中静态域名列表的说明。</li>
<li>TLS 配置中添加了禁用系统 CA 的选项。</li>
<li>路由中添加了流量属性检测,可用于检测 URL。</li>
</ul>
<h2 id="20190222-v417"><a name="20190222-v417" class="plugin-anchor" href="#20190222-v417"><i class="fa fa-link" aria-hidden="true"></i></a>2019.02.22 v4.17</h2>
<ul>
<li>V2Ctl 中新增了 <code>tlsping</code> 工具。</li>
</ul>
<h2 id="20190215-v416"><a name="20190215-v416" class="plugin-anchor" href="#20190215-v416"><i class="fa fa-link" aria-hidden="true"></i></a>2019.02.15 v4.16</h2>
<p>使用相关:</p>
<ul>
<li>DNS 传出代理支持修改目标 DNS 服务器的设定。</li>
</ul>
<p>开发相关:</p>
<ul>
<li>'ext' 仓库已完全迁移到 'core'。<a href="https://github.com/v2ray/v2ray-core/issues/1541" target="_blank">#1541</a></li>
</ul>
<h2 id="20190208-v415"><a name="20190208-v415" class="plugin-anchor" href="#20190208-v415"><i class="fa fa-link" aria-hidden="true"></i></a>2019.02.08 v4.15</h2>
<ul>
<li>DNS 传出代理。</li>
</ul>
<h2 id="20190201-v414"><a name="20190201-v414" class="plugin-anchor" href="#20190201-v414"><i class="fa fa-link" aria-hidden="true"></i></a>2019.02.01 v4.14</h2>
<ul>
<li>DNS 支持了静态域名到域名的匹配。</li>
</ul>
<h2 id="20190118-v413"><a name="20190118-v413" class="plugin-anchor" href="#20190118-v413"><i class="fa fa-link" aria-hidden="true"></i></a>2019.01.18 v4.13</h2>
<ul>
<li>更新了 Quic 库,与之前的版本不兼容。</li>
<li>DNS 配置中新增了<code>tag</code>选项。</li>
</ul>
<h2 id="20190111-v411"><a name="20190111-v411" class="plugin-anchor" href="#20190111-v411"><i class="fa fa-link" aria-hidden="true"></i></a>2019.01.11 v4.11</h2>
<p>开发相关:</p>
<ul>
<li>新增了 <a href="https://github.com/v2ray/v2ray-core/blob/b52725cf659e0f7a38fed2eb36a5a792843bd54f/functions.go#L65" target="_blank">core.DialUDP</a></li>
<li><a href="https://github.com/v2ray/v2ray-core/blob/a1b552f9487d2687228dd1d89003087331f62eab/transport/internet/dialer.go#L66" target="_blank">internet.DialSystem</a> 现在会调用 <a href="https://github.com/v2ray/v2ray-core/blob/a1b552f9487d2687228dd1d89003087331f62eab/transport/internet/tcp_hub.go#L65" target="_blank">internet.ListenSystemPacket</a> 去建立 UDP 连接。</li>
</ul>
<h2 id="20181207-v48"><a name="20181207-v48" class="plugin-anchor" href="#20181207-v48"><i class="fa fa-link" aria-hidden="true"></i></a>2018.12.07 v4.8</h2>
<p>使用相关:</p>
<ul>
<li>Bug 修复</li>
</ul>
<p>开发相关:</p>
<ul>
<li>新增了 <a href="https://github.com/v2ray/v2ray-core/blob/master/annotations.go#L13" target="_blank">API 文档</a></li>
<li>新增了 <a href="https://github.com/v2ray/v2ray-core/blob/v4.8.0/transport/internet/system_listener.go#L63" target="_blank">internet.RegisterListenerController</a> 方法</li>
<li>新增了 <a href="https://github.com/v2ray/v2ray-core/blob/v4.8.0/transport/internet/system_dialer.go#L105" target="_blank">internet.RegisterDialerController</a> 方法</li>
</ul>
<h2 id="20181130-v47"><a name="20181130-v47" class="plugin-anchor" href="#20181130-v47"><i class="fa fa-link" aria-hidden="true"></i></a>2018.11.30 v4.7</h2>
<ul>
<li>Freedom 中新增了 UseIPv4 和 UseIPv6 模式。</li>
<li>传输方式新增了 QUIC。</li>
</ul>
<h2 id="20181123-v46"><a name="20181123-v46" class="plugin-anchor" href="#20181123-v46"><i class="fa fa-link" aria-hidden="true"></i></a>2018.11.23 v4.6</h2>
<ul>
<li>Freedom 的<code>"UseIP"</code>模式会根据出站所用的 IP 地址自动使用 IPv4 或 IPv6 目标地址。</li>
</ul>
<h2 id="20181116-v44"><a name="20181116-v44" class="plugin-anchor" href="#20181116-v44"><i class="fa fa-link" aria-hidden="true"></i></a>2018.11.16 v4.4</h2>
<ul>
<li>路由中新增了负载均衡配置。</li>
<li>优化了内存使用效率。</li>
</ul>
<h2 id="20181105-v41"><a name="20181105-v41" class="plugin-anchor" href="#20181105-v41"><i class="fa fa-link" aria-hidden="true"></i></a>2018.11.05 v4.1</h2>
<ul>
<li>配置文件格式简化。主要是传入传出代理和路由部分。旧版格式仍然可用,但推荐尽快升级到最新格式。</li>
<li>优化了 GeoIP 的性能,减少了内存占用,提升了匹配效率。</li>
</ul>
<h2 id="20181102-v40"><a name="20181102-v40" class="plugin-anchor" href="#20181102-v40"><i class="fa fa-link" aria-hidden="true"></i></a>2018.11.02 v4.0</h2>
<ul>
<li>反向代理</li>
<li>新增了 ppc64 和 ppc64le 预编译包。</li>
</ul>
<h2 id="20181012-v347"><a name="20181012-v347" class="plugin-anchor" href="#20181012-v347"><i class="fa fa-link" aria-hidden="true"></i></a>2018.10.12 v3.47</h2>
<ul>
<li>升级了自动构建工具</li>
</ul>
<h2 id="20180928-v344"><a name="20180928-v344" class="plugin-anchor" href="#20180928-v344"><i class="fa fa-link" aria-hidden="true"></i></a>2018.09.28 v3.44</h2>
<ul>
<li>Dokodemo-door 现已支持 Linux 的 TProxy。</li>
</ul>
<h2 id="20180921-v343"><a name="20180921-v343" class="plugin-anchor" href="#20180921-v343"><i class="fa fa-link" aria-hidden="true"></i></a>2018.09.21 v3.43</h2>
<ul>
<li>DNS 查询支持了按域名选择服务器的功能。</li>
</ul>
<h2 id="20180914-v340"><a name="20180914-v340" class="plugin-anchor" href="#20180914-v340"><i class="fa fa-link" aria-hidden="true"></i></a>2018.09.14 v3.40</h2>
<ul>
<li>传输配置中新增了连接选项,可用于配置 VPN。</li>
<li>传输配置中新增了 TCP Fast Open 选项。</li>
</ul>
<h2 id="20180903-v338"><a name="20180903-v338" class="plugin-anchor" href="#20180903-v338"><i class="fa fa-link" aria-hidden="true"></i></a>2018.09.03 v3.38</h2>
<ul>
<li>mKCP 中新增了 WireGuard 伪装。</li>
<li>修复了 mips/mips64 中 softfloat 版本的编译问题。</li>
</ul>
<h2 id="20180831-v337"><a name="20180831-v337" class="plugin-anchor" href="#20180831-v337"><i class="fa fa-link" aria-hidden="true"></i></a>2018.08.31 v3.37</h2>
<ul>
<li>优化了读取网络连接时的性能,见<a href="../chapter_02/env.html">环境变量</a>。</li>
<li>VMess 在 ARM64 平台上将默认使用 AES-128-GCM 作为加密方式。</li>
<li>使用 Go 1.11 编译。</li>
</ul>
<h2 id="20180824-v336"><a name="20180824-v336" class="plugin-anchor" href="#20180824-v336"><i class="fa fa-link" aria-hidden="true"></i></a>2018.08.24 v3.36</h2>
<ul>
<li>大幅提升了路由中子域名(<code>domain:</code>)匹配的效率。</li>
<li>路由中支持了完整域名匹配。</li>
</ul>
<h2 id="20180807-v334"><a name="20180807-v334" class="plugin-anchor" href="#20180807-v334"><i class="fa fa-link" aria-hidden="true"></i></a>2018.08.07 v3.34</h2>
<ul>
<li>在大多数设备上有了更精确的内存控制</li>
</ul>
<h2 id="20180727-v332"><a name="20180727-v332" class="plugin-anchor" href="#20180727-v332"><i class="fa fa-link" aria-hidden="true"></i></a>2018.07.27 v3.32</h2>
<ul>
<li>现在可以探测 BitTorrent 流量了。</li>
<li>路由配置中新增了<code>protocol</code>选项用于按流量类型进行路由选择。</li>
<li>路由配置中新增了<code>geosite:speedtest</code>用于适配所有的 Speedtest.net 公用服务器。</li>
</ul>
<h2 id="20180720-v331"><a name="20180720-v331" class="plugin-anchor" href="#20180720-v331"><i class="fa fa-link" aria-hidden="true"></i></a>2018.07.20 v3.31</h2>
<ul>
<li>新增了 <a href="../chapter_02/transport/domainsocket.html">Domain Socket 传输方式</a> (感谢 @xiaokangwang)。</li>
</ul>
<h2 id="20180713-v330"><a name="20180713-v330" class="plugin-anchor" href="#20180713-v330"><i class="fa fa-link" aria-hidden="true"></i></a>2018.07.13 v3.30</h2>
<ul>
<li>解决了一个可能会导致 mKCP 断流的问题。</li>
<li>感谢来自俄罗斯的朋友,我们现在有<a href="https://www.v2ray.com/ru/" target="_blank">俄语文档</a>了。</li>
</ul>
<h2 id="20180706-v329"><a name="20180706-v329" class="plugin-anchor" href="#20180706-v329"><i class="fa fa-link" aria-hidden="true"></i></a>2018.07.06 v3.29</h2>
<ul>
<li>新增了 MTProto 代理协议。</li>
</ul>
<h2 id="20180629-v327"><a name="20180629-v327" class="plugin-anchor" href="#20180629-v327"><i class="fa fa-link" aria-hidden="true"></i></a>2018.06.29 v3.27</h2>
<ul>
<li>DNS 支持了 EDNS client subnet。</li>
<li>DNS 的静态 IP 匹配现在支持子域名了。</li>
</ul>
<h2 id="20180615-v326"><a name="20180615-v326" class="plugin-anchor" href="#20180615-v326"><i class="fa fa-link" aria-hidden="true"></i></a>2018.06.15 v3.26</h2>
<ul>
<li>新增了 Dragonfly BSD 的预编译版本。</li>
</ul>
<h2 id="20180601-v324"><a name="20180601-v324" class="plugin-anchor" href="#20180601-v324"><i class="fa fa-link" aria-hidden="true"></i></a>2018.06.01 v3.24</h2>
<ul>
<li>JSON 配置中新增了用户级别的缓存控制选项。</li>
<li>mKCP 新增了 DTLS 伪装。</li>
<li>TLS 现在默认只使用 TLS 1.3 推荐的加密套件。</li>
</ul>
<h2 id="20180525-v323"><a name="20180525-v323" class="plugin-anchor" href="#20180525-v323"><i class="fa fa-link" aria-hidden="true"></i></a>2018.05.25 v3.23</h2>
<ul>
<li>JSON 配置文件中,端口支持从环境变量加载。</li>
<li>JSON 配置文件支持从指定文件加载 IP 和域名。</li>
</ul>
<h2 id="20180420-v319"><a name="20180420-v319" class="plugin-anchor" href="#20180420-v319"><i class="fa fa-link" aria-hidden="true"></i></a>2018.04.20 v3.19</h2>
<ul>
<li>入站代理的流量统计。</li>
</ul>
<h2 id="20180413-v317"><a name="20180413-v317" class="plugin-anchor" href="#20180413-v317"><i class="fa fa-link" aria-hidden="true"></i></a>2018.04.13 v3.17</h2>
<ul>
<li>V2Ray 可直接加载来自 HTTP(s) 的配置文件。</li>
<li>V2Ray 的 TLS 可使用 CA 证书自动为任意域名签发新的证书。</li>
<li><a href="../chapter_02/transport/h2.html">HTTP/2</a> 传输方式。</li>
</ul>
<h2 id="20180406-v316"><a name="20180406-v316" class="plugin-anchor" href="#20180406-v316"><i class="fa fa-link" aria-hidden="true"></i></a>2018.04.06 v3.16</h2>
<ul>
<li><a href="../chapter_02/stats.html">统计信息</a>。开启方式略麻烦,请仔细看文档。</li>
<li>Shadowsocks 入站协议现在可以只监听 UDP 端口而不监听 TCP 了。强烈建议不在同一端口上同时监听 TCP 和 UDP。</li>
</ul>
<h2 id="20180302-v311"><a name="20180302-v311" class="plugin-anchor" href="#20180302-v311"><i class="fa fa-link" aria-hidden="true"></i></a>2018.03.02 v3.11</h2>
<ul>
<li>VMess Inbound 提供了一个选项,用于禁止客户端使用不安全的加密方式。</li>
<li>提供了 ARMv7 编译版。</li>
<li>提供了不要求 FPU 的 MIPS 编译版。</li>
</ul>
<h2 id="20180223-v310"><a name="20180223-v310" class="plugin-anchor" href="#20180223-v310"><i class="fa fa-link" aria-hidden="true"></i></a>2018.02.23 v3.10</h2>
<ul>
<li>日志格式修改,每条日志前添加了 Session ID,用于区分不同的代理请求。</li>
<li>修复了一些问题。</li>
</ul>
<h2 id="20180216-v39"><a name="20180216-v39" class="plugin-anchor" href="#20180216-v39"><i class="fa fa-link" aria-hidden="true"></i></a>2018.02.16 v3.9</h2>
<ul>
<li>新年快乐!</li>
<li>修复了一些问题。</li>
</ul>
<h2 id="20180209-v37"><a name="20180209-v37" class="plugin-anchor" href="#20180209-v37"><i class="fa fa-link" aria-hidden="true"></i></a>2018.02.09 v3.7</h2>
<ul>
<li>开发者预览:<a href="../chapter_02/api.html">远程控制</a>。</li>
<li>修复了一些问题。</li>
</ul>
<h2 id="20171229-v35"><a name="20171229-v35" class="plugin-anchor" href="#20171229-v35"><i class="fa fa-link" aria-hidden="true"></i></a>2017.12.29 v3.5</h2>
<ul>
<li>Geoip 支持名为“Private”的私有地址列表。</li>
</ul>
<h2 id="20171222-v34"><a name="20171222-v34" class="plugin-anchor" href="#20171222-v34"><i class="fa fa-link" aria-hidden="true"></i></a>2017.12.22 v3.4</h2>
<ul>
<li>Websocket 现在可以识别 X-Forwarded-For 并用做源地址。</li>
<li>支持 s390x 平台。</li>
</ul>
<h2 id="20171208-v31"><a name="20171208-v31" class="plugin-anchor" href="#20171208-v31"><i class="fa fa-link" aria-hidden="true"></i></a>2017.12.08 v3.1</h2>
<ul>
<li>支持<a href="../chapter_02/policy.html">本地策略</a></li>
<li>支持从环境变量指定的路径加载配置文件</li>
</ul>
<h2 id="20171201-v30"><a name="20171201-v30" class="plugin-anchor" href="#20171201-v30"><i class="fa fa-link" aria-hidden="true"></i></a>2017.12.01 v3.0</h2>
<ul>
<li>支持 Shadowsocks AEAD</li>
</ul>
<h2 id="20171118-v250"><a name="20171118-v250" class="plugin-anchor" href="#20171118-v250"><i class="fa fa-link" aria-hidden="true"></i></a>2017.11.18 v2.50</h2>
<ul>
<li><code>v2ray</code> 现在会尝试使用 <code>v2ctl</code> 进行配置文件解析,请确保这两个文件在同一目录下;</li>
<li>路由中新增 <code>IPOnDemand</code> 策略进行同步 IP 解析;</li>
</ul>
<h2 id="20171110-v247"><a name="20171110-v247" class="plugin-anchor" href="#20171110-v247"><i class="fa fa-link" aria-hidden="true"></i></a>2017.11.10 v2.47</h2>
<ul>
<li><code>geosite</code> 的数据现在放在 <code>geosite.dat</code> 文件中了。</li>
<li>一些修复。</li>
</ul>
<h2 id="20171103-v246"><a name="20171103-v246" class="plugin-anchor" href="#20171103-v246"><i class="fa fa-link" aria-hidden="true"></i></a>2017.11.03 v2.46</h2>
<ul>
<li>路由中添加 <code>geosite:cn</code>,等效于现有的<code>chinasites</code>,但更加灵活。</li>
<li>路由中添加 <code>geoip</code>。<ul>
<li>安装包中新增了<code>geoip.dat</code>文件,包含所有<code>geoip</code>信息,此文件必须和<code>v2ray</code>程序放置于同一路径下。由于安装脚本未及时更新,服务器端和部分客户端可能需要手动复制此文件。</li>
</ul>
</li>
<li>安装包中新增 <code>v2ctl</code> 程序,可使用命令<code>v2ctl verify /path/to/v2ray</code>来验证<code>v2ray</code>程序签名的有效性。</li>
</ul>
<h2 id="20171027-v244"><a name="20171027-v244" class="plugin-anchor" href="#20171027-v244"><i class="fa fa-link" aria-hidden="true"></i></a>2017.10.27 v2.44</h2>
<ul>
<li>HTTP 代理中加入了 Basic Authentication 支持。</li>
<li>修复了一些 bug。</li>
</ul>
<h2 id="20171006-v240"><a name="20171006-v240" class="plugin-anchor" href="#20171006-v240"><i class="fa fa-link" aria-hidden="true"></i></a>2017.10.06 v2.40</h2>
<ul>
<li>修复了导致内存泄漏的问题。</li>
</ul>
<h2 id="20170929-v239"><a name="20170929-v239" class="plugin-anchor" href="#20170929-v239"><i class="fa fa-link" aria-hidden="true"></i></a>2017.09.29 v2.39</h2>
<ul>
<li>当远程服务器关闭连接时,入站代理现在会尽快断开与客户端的连接。</li>
<li>默认连接超时时间更改为 5 分钟。</li>
</ul>
<h2 id="20170512-v227"><a name="20170512-v227" class="plugin-anchor" href="#20170512-v227"><i class="fa fa-link" aria-hidden="true"></i></a>2017.05.12 v2.27</h2>
<ul>
<li>路由中新增了“域名”匹配选项。</li>
</ul>
<h2 id="20170502-v226"><a name="20170502-v226" class="plugin-anchor" href="#20170502-v226"><i class="fa fa-link" aria-hidden="true"></i></a>2017.05.02 v2.26</h2>
<ul>
<li>各种稳定性修复。</li>
</ul>
<h2 id="20170428-v225"><a name="20170428-v225" class="plugin-anchor" href="#20170428-v225"><i class="fa fa-link" aria-hidden="true"></i></a>2017.04.28 v2.25</h2>
<ul>
<li>可以简单地探测 HTTP 和 HTTPS 流量并根据其内容进行转发。</li>
</ul>
<h2 id="20170421-v224"><a name="20170421-v224" class="plugin-anchor" href="#20170421-v224"><i class="fa fa-link" aria-hidden="true"></i></a>2017.04.21 v2.24</h2>
<ul>
<li>修复了 Mux 的稳定性问题。</li>
<li>提升了总体的内存使用效率。</li>
</ul>
<h2 id="20170415-v223"><a name="20170415-v223" class="plugin-anchor" href="#20170415-v223"><i class="fa fa-link" aria-hidden="true"></i></a>2017.04.15 v2.23</h2>
<ul>
<li>提升了 Mux 的性能。</li>
<li>Mux 中可以配置并发连接数了。</li>
<li>提升了 HTTP 代理的性能。</li>
<li>移除了 connectionReuse 的配置(由 Mux 替代)。</li>
</ul>
<h2 id="20170408-v222"><a name="20170408-v222" class="plugin-anchor" href="#20170408-v222"><i class="fa fa-link" aria-hidden="true"></i></a>2017.04.08 v2.22</h2>
<ul>
<li>Mux.Cool 协议</li>
</ul>
<h2 id="20170225-v220"><a name="20170225-v220" class="plugin-anchor" href="#20170225-v220"><i class="fa fa-link" aria-hidden="true"></i></a>2017.02.25 v2.20</h2>
<ul>
<li>安装包中可执行文件附带了 gpg 签名。</li>
<li>Windows 安装包中带了新的 wv2ray.exe,运行时不会出现任何界面。</li>
</ul>
<h2 id="20170218-v219"><a name="20170218-v219" class="plugin-anchor" href="#20170218-v219"><i class="fa fa-link" aria-hidden="true"></i></a>2017.02.18 v2.19</h2>
<ul>
<li>服务器端强制开启防重放攻击(Anti replay attack)机制。<ul>
<li>不会影响任何现有客户端。</li>
</ul>
</li>
<li>VMess AES-128-GCM / Chacha20-Poly1305 / None 加密方式升级。<ul>
<li>如正在使用其中任何一个加密方式,请同时升级客户端和服务器。</li>
<li>AES-128-CFB 不受影响。</li>
</ul>
</li>
<li>使用 Golang 1.8 编译,加入对 32 位 MIPS 的支持。</li>
</ul>
<h2 id="20170211-v218"><a name="20170211-v218" class="plugin-anchor" href="#20170211-v218"><i class="fa fa-link" aria-hidden="true"></i></a>2017.02.11 v2.18</h2>
<ul>
<li>清理了 WebSocket 相关的代码。</li>
<li>移除了 allowPassive 设置。现在的行为相当于 allowPassive = true。</li>
<li>Bug 修复。</li>
</ul>
<h2 id="20170204-v217"><a name="20170204-v217" class="plugin-anchor" href="#20170204-v217"><i class="fa fa-link" aria-hidden="true"></i></a>2017.02.04 v2.17</h2>
<ul>
<li>Bug 修复。</li>
</ul>
<h2 id="20170128-v216"><a name="20170128-v216" class="plugin-anchor" href="#20170128-v216"><i class="fa fa-link" aria-hidden="true"></i></a>2017.01.28 v2.16</h2>
<ul>
<li>Freedom 中可以指定一个重定向地址,将所有数据发往这个地址。此选项可用于适配 Shadowsocks Obfs 或 KCPTun 等工具。</li>
<li>VMess 的“不加密”选项性能优化,与之前版本不兼容。</li>
<li>新年快乐!</li>
</ul>
<h2 id="20170116-v215"><a name="20170116-v215" class="plugin-anchor" href="#20170116-v215"><i class="fa fa-link" aria-hidden="true"></i></a>2017.01.16 v2.15</h2>
<ul>
<li>mKCP 和 WebSocket 现已适用于所有的出站(入站)协议。</li>
</ul>
<h2 id="20170109-v214"><a name="20170109-v214" class="plugin-anchor" href="#20170109-v214"><i class="fa fa-link" aria-hidden="true"></i></a>2017.01.09 v2.14</h2>
<ul>
<li>Socks 5 出站协议。</li>
<li>mKCP 新增微信视频通话伪装。</li>
</ul>
<h2 id="20170102-v213"><a name="20170102-v213" class="plugin-anchor" href="#20170102-v213"><i class="fa fa-link" aria-hidden="true"></i></a>2017.01.02 v2.13</h2>
<ul>
<li>修复了一些问题。</li>
</ul>
<h2 id="20161226-v212"><a name="20161226-v212" class="plugin-anchor" href="#20161226-v212"><i class="fa fa-link" aria-hidden="true"></i></a>2016.12.26 v2.12</h2>
<ul>
<li>修复了一些问题。</li>
</ul>
<h2 id="20161219-v211"><a name="20161219-v211" class="plugin-anchor" href="#20161219-v211"><i class="fa fa-link" aria-hidden="true"></i></a>2016.12.19 v2.11</h2>
<ul>
<li>JSON 配置文件可以写注释了。</li>
</ul>
<h2 id="20161212-v210"><a name="20161212-v210" class="plugin-anchor" href="#20161212-v210"><i class="fa fa-link" aria-hidden="true"></i></a>2016.12.12 v2.10</h2>
<ul>
<li>VMess 中增加了 AES-GCM 和 Chacha20-Poly1305 加密方式;</li>
</ul>
<h2 id="20161205-v29"><a name="20161205-v29" class="plugin-anchor" href="#20161205-v29"><i class="fa fa-link" aria-hidden="true"></i></a>2016.12.05 v2.9</h2>
<ul>
<li>修复了与 Alpine Linux 的兼容性;</li>
</ul>
<h2 id="20161128-v28"><a name="20161128-v28" class="plugin-anchor" href="#20161128-v28"><i class="fa fa-link" aria-hidden="true"></i></a>2016.11.28 v2.8</h2>
<ul>
<li>Shadowsocks 服务器端现接受 OTA 设置,可强制开启或关闭 OTA 验证;</li>
<li>小修小补;</li>
</ul>
<h2 id="20161121-v27"><a name="20161121-v27" class="plugin-anchor" href="#20161121-v27"><i class="fa fa-link" aria-hidden="true"></i></a>2016.11.21 v2.7</h2>
<ul>
<li>现在可以给主入站出站连接设置标识了;</li>
<li>一些小修小补;</li>
</ul>
<h2 id="20161114-v26"><a name="20161114-v26" class="plugin-anchor" href="#20161114-v26"><i class="fa fa-link" aria-hidden="true"></i></a>2016.11.14 v2.6</h2>
<ul>
<li>可将一个出站协议发出的数据转发至另一出站协议;</li>
<li>路由可根据入站协议的标识来进行判断了;</li>
</ul>
<h2 id="20161107-v25"><a name="20161107-v25" class="plugin-anchor" href="#20161107-v25"><i class="fa fa-link" aria-hidden="true"></i></a>2016.11.07 v2.5</h2>
<ul>
<li>新增 Shadowsocks 出站协议;</li>
<li>新增 TCP 连接中的 HTTP 头部伪装;</li>
</ul>
<h2 id="20161024-v24"><a name="20161024-v24" class="plugin-anchor" href="#20161024-v24"><i class="fa fa-link" aria-hidden="true"></i></a>2016.10.24 v2.4</h2>
<ul>
<li>每个入站出站协议可以配置各自的 TCP / mKCP / WebSocket 设置了;</li>
<li>路由现可以跟据来源 IP 进行转发;</li>
</ul>
<h2 id="20161017-v23"><a name="20161017-v23" class="plugin-anchor" href="#20161017-v23"><i class="fa fa-link" aria-hidden="true"></i></a>2016.10.17 v2.3</h2>
<ul>
<li>重构了配置文件相关的代码,引入了基于 Protobuf 的新格式;</li>
<li>增加了 OpenBSD 的二进程文件;</li>
<li>小修小补;</li>
</ul>
<h2 id="20160919-v22"><a name="20160919-v22" class="plugin-anchor" href="#20160919-v22"><i class="fa fa-link" aria-hidden="true"></i></a>2016.09.19 v2.2</h2>
<ul>
<li>新增了 WebSocket 的载体(感谢 <a href="https://github.com/xiaokangwang" target="_blank">@xiaokangwang</a>);</li>
</ul>
<h2 id="20160919-v21"><a name="20160919-v21" class="plugin-anchor" href="#20160919-v21"><i class="fa fa-link" aria-hidden="true"></i></a>2016.09.19 v2.1</h2>
<ul>
<li>mKCP 性能提升;</li>
</ul>
<h2 id="20160820-v20"><a name="20160820-v20" class="plugin-anchor" href="#20160820-v20"><i class="fa fa-link" aria-hidden="true"></i></a>2016.08.20 v2.0</h2>
<ul>
<li>一周年</li>
</ul>
<h2 id="20160815-v124"><a name="20160815-v124" class="plugin-anchor" href="#20160815-v124"><i class="fa fa-link" aria-hidden="true"></i></a>2016.08.15 v1.24</h2>
<ul>
<li>mKCP 新增了 BT 数据包伪装。</li>
<li>入站连接现在可以设置 allowPassive 来允许被动连接,如 IMAP。</li>
</ul>
<h2 id="20160808-v123"><a name="20160808-v123" class="plugin-anchor" href="#20160808-v123"><i class="fa fa-link" aria-hidden="true"></i></a>2016.08.08 v1.23</h2>
<ul>
<li>优化了 mKCP 数据包。此版本的 mKCP 与之前版本不兼容,请同时升级客户端和服务器。</li>
<li>mKCP 现在可以经过配置,伪装成视频通话的数据。</li>
</ul>
<h2 id="20160801-v122"><a name="20160801-v122" class="plugin-anchor" href="#20160801-v122"><i class="fa fa-link" aria-hidden="true"></i></a>2016.08.01 v1.22</h2>
<ul>
<li>修复了 mKCP 中一个内存泄漏问题;</li>
<li>新增了 FreeBSD 的支持;</li>
</ul>
<h2 id="20160725-v121"><a name="20160725-v121" class="plugin-anchor" href="#20160725-v121"><i class="fa fa-link" aria-hidden="true"></i></a>2016.07.25 v1.21</h2>
<ul>
<li>提升了 ChaCha20 的性能(感谢 aead@);</li>
<li>修复了一些问题;</li>
</ul>
<h2 id="20160718-v120"><a name="20160718-v120" class="plugin-anchor" href="#20160718-v120"><i class="fa fa-link" aria-hidden="true"></i></a>2016.07.18 v1.20</h2>
<ul>
<li>KCP 中新增了 readBufferSize 和 writeBufferSize 选项;</li>
<li>修复了一些问题;</li>
</ul>
<h2 id="20160711-v119"><a name="20160711-v119" class="plugin-anchor" href="#20160711-v119"><i class="fa fa-link" aria-hidden="true"></i></a>2016.07.11 v1.19</h2>
<ul>
<li>新增了 <a href="../chapter_02/05_transport.html#分连接配置">TLS 选项</a>,平台支持的所有协议都可以开启 TLS;</li>
<li>修复了 KCP 的性能问题;</li>
<li>修复了一个可能导致 KCP 中 EOF 响应的问题;</li>
</ul>
<h2 id="20160704-v118"><a name="20160704-v118" class="plugin-anchor" href="#20160704-v118"><i class="fa fa-link" aria-hidden="true"></i></a>2016.07.04 v1.18</h2>
<ul>
<li>修复了 KCP 中连接多过的问题;</li>
<li>降低了 KCP 对 CPU 的使用;</li>
<li>修复了一些其它的问题;</li>
</ul>
<h2 id="20160619-v117"><a name="20160619-v117" class="plugin-anchor" href="#20160619-v117"><i class="fa fa-link" aria-hidden="true"></i></a>2016.06.19 v1.17</h2>
<ul>
<li>整合了 KCP(感谢 <a href="https://github.com/xiaokangwang" target="_blank">xiaokangwang</a>、<a href="https://github.com/xtaci" target="_blank">xtaci</a>、<a href="https://github.com/skywind3000" target="_blank">skywind3000</a>)</li>
<li>修复了一些小问题</li>
</ul>
<h2 id="20160612-v116"><a name="20160612-v116" class="plugin-anchor" href="#20160612-v116"><i class="fa fa-link" aria-hidden="true"></i></a>2016.06.12 v1.16</h2>
<ul>
<li>TCP 连接重用默认开启;</li>
<li>Dokodemo-door 现在可以识别由 iptables 转发的数据了;</li>
<li>Blackhole 可配置自动发送 HTTP 形式的拒绝数据;</li>
</ul>
<h2 id="20160605-v115"><a name="20160605-v115" class="plugin-anchor" href="#20160605-v115"><i class="fa fa-link" aria-hidden="true"></i></a>2016.06.05 v1.15</h2>
<ul>
<li>增加了 TCP 连接重用选项,对于 HTTP 请求的性能有明显的提升;</li>
<li>支持监听指定的 IP 地址而非全部;</li>
<li>支持从指定的 IP 地址发出数据;</li>
<li>修复了 HTTP 代理中一个可能会导致内存耗尽的问题;</li>
</ul>
<h2 id="20160529-v114"><a name="20160529-v114" class="plugin-anchor" href="#20160529-v114"><i class="fa fa-link" aria-hidden="true"></i></a>2016.05.29 v1.14</h2>
<ul>
<li>修复了 HTTP 代理中一个可能导致崩溃的问题;</li>
<li><a href="install.html">安装脚本</a>中增加了一些功能;</li>
<li><a href="../chapter_02/04_dns.html">DNS</a> 中增加了静态路由功能;</li>
<li>官方服务器地址变动;</li>
</ul>
<h2 id="20160516-v113"><a name="20160516-v113" class="plugin-anchor" href="#20160516-v113"><i class="fa fa-link" aria-hidden="true"></i></a>2016.05.16 v1.13</h2>
<ul>
<li>内置 DNS 服务,可搭配 chinasites 和 chinaip 进行更为精准的路由判断;</li>
<li>修复了一个 UDP 转发时的问题;</li>
</ul>
<h2 id="20160501-v1121"><a name="20160501-v1121" class="plugin-anchor" href="#20160501-v1121"><i class="fa fa-link" aria-hidden="true"></i></a>2016.05.01 v1.12.1</h2>
<ul>
<li>修复了 VMess 协议中的一个 bug。</li>
</ul>
<h2 id="20160501-v112"><a name="20160501-v112" class="plugin-anchor" href="#20160501-v112"><i class="fa fa-link" aria-hidden="true"></i></a>2016.05.01 v1.12</h2>
<ul>
<li>再次尝试修复内存使用问题;</li>
<li>提升了 Shadowsocks 的性能;</li>
<li>loglevel 增加了新的选项“none”表示不记录任何 log;</li>
</ul>
<h2 id="20160418-v111"><a name="20160418-v111" class="plugin-anchor" href="#20160418-v111"><i class="fa fa-link" aria-hidden="true"></i></a>2016.04.18 v1.11</h2>
<ul>
<li>尝试修复内存使用问题。</li>
</ul>
<h2 id="20160307-v110"><a name="20160307-v110" class="plugin-anchor" href="#20160307-v110"><i class="fa fa-link" aria-hidden="true"></i></a>2016.03.07 v1.10</h2>
<ul>
<li>修复了动态端口刷新时的性能问题。</li>
</ul>
<h2 id="20160229-v191"><a name="20160229-v191" class="plugin-anchor" href="#20160229-v191"><i class="fa fa-link" aria-hidden="true"></i></a>2016.02.29 v1.9.1</h2>
<ul>
<li>修复了 Shadowsocks 中 OTA 的问题。</li>
</ul>
<h2 id="20160229-v19"><a name="20160229-v19" class="plugin-anchor" href="#20160229-v19"><i class="fa fa-link" aria-hidden="true"></i></a>2016.02.29 v1.9</h2>
<ul>
<li>Shadowsocks 支持了 ChaCha20 加密方式;</li>
<li>默认配置文件增加了更多的直连网站;</li>
<li>动态端口中现已可以自动创建帐号,无需事先指定;</li>
</ul>
<h2 id="20160222-v18"><a name="20160222-v18" class="plugin-anchor" href="#20160222-v18"><i class="fa fa-link" aria-hidden="true"></i></a>2016.02.22 v1.8</h2>
<ul>
<li>更新了安装脚本 install-release.sh (感谢 netcookies@):<ul>
<li>现在可以自动停止 V2Ray 进程,并在更新完成后自动运行 V2Ray;</li>
<li>install-release.sh 接受 --proxy 参数并从指定的代理下载 V2Ray;</li>
</ul>
</li>
<li>使用 Go 1.6 编译,提升了 AES 加密的性能;</li>
<li>一些小修小补;</li>
<li>官方服务器 IP 更新,请重新下载安装包以获得最新的配置。</li>
</ul>
<h2 id="20160208-v17"><a name="20160208-v17" class="plugin-anchor" href="#20160208-v17"><i class="fa fa-link" aria-hidden="true"></i></a>2016.02.08 v1.7</h2>
<ul>
<li>提升了 UDP 转发的性能;</li>
<li>提升了 Shadowsocks 的安全性;</li>
<li>修复了一些问题;</li>
<li>祝大家新年快乐!</li>
</ul>
<h2 id="20160201-v16"><a name="20160201-v16" class="plugin-anchor" href="#20160201-v16"><i class="fa fa-link" aria-hidden="true"></i></a>2016.02.01 v1.6</h2>
<ul>
<li>服务器端支持 Shadowsocks;<ul>
<li><a href="../chapter_02/02_protocols.html#shadowsocks">协议详情</a></li>
</ul>
</li>
</ul>
<h2 id="20160125-v15"><a name="20160125-v15" class="plugin-anchor" href="#20160125-v15"><i class="fa fa-link" aria-hidden="true"></i></a>2016.01.25 v1.5</h2>
<ul>
<li>修复了一个 VMess 中的安全性问题,导致了 1.5 和之前版本不兼容,请同时升级你的客户端和服务器端;</li>
<li>修复了一个路由不能正常工作的问题;</li>
<li><a href="../chapter_03/00_dynport.md">动态端口</a>;</li>
<li>略微提升了性能;</li>
</ul>
<h2 id="20160118-v14"><a name="20160118-v14" class="plugin-anchor" href="#20160118-v14"><i class="fa fa-link" aria-hidden="true"></i></a>2016.01.18 v1.4</h2>
<ul>
<li>更新了<a href="install.html">安装脚本</a>,在 Debian / Ubuntu / CentOS 7 中可自动安装和更新 V2Ray;</li>
<li>修复了一个 VMess 的内存使用问题;</li>
</ul>
<h2 id="20160111-v13"><a name="20160111-v13" class="plugin-anchor" href="#20160111-v13"><i class="fa fa-link" aria-hidden="true"></i></a>2016.01.11 v1.3</h2>
<ul>
<li>Wiki 中更新了一些英语页面(感谢 chenxiaoqino);</li>
<li>Docker 配置文件(感谢 adoot);</li>
<li>HTTP 代理(感谢 adoot);</li>
<li>路由中内置了常见的<a href="../chapter_02/03_routing.html">国内网站域名</a>;</li>
<li>VMess 配置中新增了 <a href="../chapter_02/02_protocols.html">alterId 选项</a>;</li>
<li>修复了若干小问题;</li>
</ul>
<h2 id="20151214-v12"><a name="20151214-v12" class="plugin-anchor" href="#20151214-v12"><i class="fa fa-link" aria-hidden="true"></i></a>2015.12.14 v1.2</h2>
<ul>
<li>简洁且高效的国内 IP 路由;</li>
<li>错误日志可写入文件;</li>
<li>路由中支持正则表达式方式的域名匹配;</li>
<li>修复了一个 SOCKS 协议的兼容性 bug;</li>
</ul>
<h2 id="20151207-v11"><a name="20151207-v11" class="plugin-anchor" href="#20151207-v11"><i class="fa fa-link" aria-hidden="true"></i></a>2015.12.07 v1.1</h2>
<ul>
<li>修复了一个 VMess 协议的 bug,也导致了 1.1 和 1.0 的应用程序不兼容,配置文件不受影响;</li>
<li>修复了一个 InboundDetourHandler 中的 bug;</li>
</ul>
<h2 id="20151130-v10"><a name="20151130-v10" class="plugin-anchor" href="#20151130-v10"><i class="fa fa-link" aria-hidden="true"></i></a>2015.11.30 v1.0</h2>
<p>V2Ray 1.0 正式版,包含以下功能:</p>
<ul>
<li>Socks 4 / 5 代理协议;</li>
<li>可以防止重放攻击的高速中继协议;</li>
<li>静态路由功能,用户可选择性屏蔽或代理指定的 IP 段或域名;</li>
</ul>
</section>
</div>
</div>
</div>
</div>
<script>
var gitbook = gitbook || [];
gitbook.push(function() {
gitbook.page.hasChanged({"page":{"refcn":"chapter_00/01_versions","refen":"welcome/versions","title":"版本历史","level":"1.1.1","depth":2,"next":{"title":"使用方式","level":"1.1.2","depth":2,"path":"chapter_00/workflow.md","ref":"chapter_00/workflow.md","articles":[]},"previous":{"title":"Project V","level":"1.1","depth":1,"path":"README.md","ref":"README.md","articles":[{"title":"版本历史","level":"1.1.1","depth":2,"path":"chapter_00/01_versions.md","ref":"chapter_00/01_versions.md","articles":[]},{"title":"使用方式","level":"1.1.2","depth":2,"path":"chapter_00/workflow.md","ref":"chapter_00/workflow.md","articles":[]},{"title":"下载安装","level":"1.1.3","depth":2,"path":"chapter_00/install.md","ref":"chapter_00/install.md","articles":[]},{"title":"新手上路","level":"1.1.4","depth":2,"path":"chapter_00/start.md","ref":"chapter_00/start.md","articles":[]},{"title":"命令行参数","level":"1.1.5","depth":2,"path":"chapter_00/command.md","ref":"chapter_00/command.md","articles":[]},{"title":"捐助支持","level":"1.1.6","depth":2,"path":"chapter_00/02_donate.md","ref":"chapter_00/02_donate.md","articles":[]},{"title":"寻求帮助","level":"1.1.7","depth":2,"path":"chapter_00/help.md","ref":"chapter_00/help.md","articles":[]},{"title":"常见问题","level":"1.1.8","depth":2,"path":"chapter_00/faq.md","ref":"chapter_00/faq.md","articles":[]},{"title":"博客↪","level":"1.1.9","depth":2,"url":"https://steemit.com/@v2ray","ref":"https://steemit.com/@v2ray","articles":[]},{"title":"白话文教程↪","level":"1.1.10","depth":2,"url":"https://toutyrater.github.io/","ref":"https://toutyrater.github.io/","articles":[]},{"title":"新白话文教程(社区版)↪","level":"1.1.11","depth":2,"url":"https://guide.v2fly.org/","ref":"https://guide.v2fly.org/","articles":[]}]},"dir":"ltr"},"config":{"plugins":["-fontsettings","-search","-lunr","-highlight","-sharing","mermaid-gb3","anchors","ga","prism","prism-themes","hints"],"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"pluginsConfig":{"ga":{"configuration":"auto","token":"UA-73620536-1"},"prism":{"css":["prism-themes/themes/prism-base16-ateliersulphurpool.light.css"],"lang":{"objc":"objectivec","shell":"bash","text":"textile","plain":"textile"}},"mermaid-gb3":{},"anchors":{},"prism-themes":{},"hints":{"danger":"fa fa-exclamation-circle","info":"fa fa-info-circle","tip":"fa fa-mortar-board","working":"fa fa-wrench"},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Project V 官方网站","language":"zh","gitbook":"*"},"file":{"path":"chapter_00/01_versions.md","mtime":"2019-12-09T02:03:16.155Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2019-12-09T02:05:14.919Z"},"basePath":"..","book":{"language":""}});
});
</script>
</div>
<script src="../gitbook/gitbook.js"></script>
<script src="../gitbook/theme.js"></script>
<script src="../gitbook/gitbook-plugin-mermaid-gb3/book/plugin.js"></script>
<script src="../gitbook/gitbook-plugin-ga/plugin.js"></script>
<script src="../gitbook/gitbook-plugin-mermaid-gb3/mermaid/mermaid.min.js"></script>
</body>
</html>
================================================
FILE: chapter_00/02_donate.html
================================================
<!DOCTYPE HTML>
<html lang="zh" >
<head>
<meta charset="UTF-8">
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<title>捐助支持 · Project V 官方网站</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<script type="text/javascript">
function inIframe () {
try { return window.self !== window.top; } catch (e) { return true; }
}
function isValidDomain() {
var host = window.location.hostname;
var domains = ['v2ray.com', 'github.io', 'mux.cool', 'v2ray.cool', 'archive.org'];
for (var dx in domains) {
if (host.indexOf(domains[dx]) >= 0) {
return true;
}
}
return false;
}
if (inIframe() || !isValidDomain()) {
window.top.location.href = 'https://www.v2ray.com/';
}
</script>
<link rel="stylesheet" href="../gitbook/style.css">
<link rel="stylesheet" href="../gitbook/gitbook-plugin-mermaid-gb3/mermaid/mermaid.css">
<link rel="stylesheet" href="../gitbook/gitbook-plugin-anchors/plugin.css">
<link rel="stylesheet" href="../gitbook/gitbook-plugin-prism/prism-base16-ateliersulphurpool.light.css">
<link rel="stylesheet" href="../gitbook/gitbook-plugin-hints/plugin-hints.css">
<link rel="stylesheet" href="../styles/website.css">
<meta name="HandheldFriendly" content="true"/>
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<link rel="apple-touch-icon-precomposed" sizes="152x152" type="image/png" href="/resources/favicon-152.png">
<link rel="apple-touch-icon-precomposed" sizes="180x180" type="image/png" href="/resources/favicon-180.png">
<link rel="icon" type="image/png" href="/resources/favicon-192.png">
<link rel="shortcut icon" href="/resources/favicon.ico" type="image/x-icon">
<link href="https://fonts.loli.net/css?family=Source+Code+Pro:400|Open+Sans:400,700&subset=cyrillic" rel="stylesheet">
<link rel="next" href="help.html" />
<link rel="prev" href="command.html" />
</head>
<body>
<div class="book">
<div class="book-summary">
<nav role="navigation">
<ul class="summary">
<li class="chapter " data-level="1.1" data-path="../">
<a href="../">
Project V
</a>
<ul class="articles">
<li class="chapter " data-level="1.1.1" data-path="01_versions.html">
<a href="01_versions.html">
版本历史
</a>
</li>
<li class="chapter " data-level="1.1.2" data-path="workflow.html">
<a href="workflow.html">
使用方式
</a>
</li>
<li class="chapter " data-level="1.1.3" data-path="install.html">
<a href="install.html">
下载安装
</a>
</li>
<li class="chapter " data-level="1.1.4" data-path="start.html">
<a href="start.html">
新手上路
</a>
</li>
<li class="chapter " data-level="1.1.5" data-path="command.html">
<a href="command.html">
命令行参数
</a>
</li>
<li class="chapter active" data-level="1.1.6" data-path="02_donate.html">
<a href="02_donate.html">
捐助支持
</a>
</li>
<li class="chapter " data-level="1.1.7" data-path="help.html">
<a href="help.html">
寻求帮助
</a>
</li>
<li class="chapter " data-level="1.1.8" data-path="faq.html">
<a href="faq.html">
常见问题
</a>
</li>
<li class="chapter " data-level="1.1.9" >
<a target="_blank" href="https://steemit.com/@v2ray">
博客↪
</a>
</li>
<li class="chapter " data-level="1.1.10" >
<a target="_blank" href="https://toutyrater.github.io/">
白话文教程↪
</a>
</li>
<li class="chapter " data-level="1.1.11" >
<a target="_blank" href="https://guide.v2fly.org/">
新白话文教程(社区版)↪
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.2" data-path="../chapter_02/">
<a href="../chapter_02/">
配置文件
</a>
<ul class="articles">
<li class="chapter " data-level="1.2.1" data-path="../chapter_02/01_overview.html">
<a href="../chapter_02/01_overview.html">
文件格式
</a>
</li>
<li class="chapter " data-level="1.2.2" data-path="../chapter_02/02_protocols.html">
<a href="../chapter_02/02_protocols.html">
协议列表
</a>
<ul class="articles">
<li class="chapter " data-level="1.2.2.1" data-path="../chapter_02/protocols/blackhole.html">
<a href="../chapter_02/protocols/blackhole.html">
Blackhole
</a>
</li>
<li class="chapter " data-level="1.2.2.2" data-path="../chapter_02/protocols/dns.html">
<a href="../chapter_02/protocols/dns.html">
DNS
</a>
</li>
<li class="chapter " data-level="1.2.2.3" data-path="../chapter_02/protocols/dokodemo.html">
<a href="../chapter_02/protocols/dokodemo.html">
Dokodemo
</a>
</li>
<li class="chapter " data-level="1.2.2.4" data-path="../chapter_02/protocols/freedom.html">
<a href="../chapter_02/protocols/freedom.html">
Freedom
</a>
</li>
<li class="chapter " data-level="1.2.2.5" data-path="../chapter_02/protocols/http.html">
<a href="../chapter_02/protocols/http.html">
HTTP
</a>
</li>
<li class="chapter " data-level="1.2.2.6" data-path="../chapter_02/protocols/mtproto.html">
<a href="../chapter_02/protocols/mtproto.html">
MTProto
</a>
</li>
<li class="chapter " data-level="1.2.2.7" data-path="../chapter_02/protocols/shadowsocks.html">
<a href="../chapter_02/protocols/shadowsocks.html">
Shadowsocks
</a>
</li>
<li class="chapter " data-level="1.2.2.8" data-path="../chapter_02/protocols/socks.html">
<a href="../chapter_02/protocols/socks.html">
SOCKS
</a>
</li>
<li class="chapter " data-level="1.2.2.9" data-path="../chapter_02/protocols/vmess.html">
<a href="../chapter_02/protocols/vmess.html">
VMess
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.2.3" data-path="../chapter_02/policy.html">
<a href="../chapter_02/policy.html">
本地策略
</a>
</li>
<li class="chapter " data-level="1.2.4" data-path="../chapter_02/03_routing.html">
<a href="../chapter_02/03_routing.html">
路由配置
</a>
</li>
<li class="chapter " data-level="1.2.5" data-path="../chapter_02/04_dns.html">
<a href="../chapter_02/04_dns.html">
DNS 配置
</a>
</li>
<li class="chapter " data-level="1.2.6" data-path="../chapter_02/mux.html">
<a href="../chapter_02/mux.html">
Mux 配置
</a>
</li>
<li class="chapter " data-level="1.2.7" data-path="../chapter_02/api.html">
<a href="../chapter_02/api.html">
API 配置
</a>
</li>
<li class="chapter " data-level="1.2.8" data-path="../chapter_02/stats.html">
<a href="../chapter_02/stats.html">
统计信息
</a>
</li>
<li class="chapter " data-level="1.2.9" data-path="../chapter_02/reverse.html">
<a href="../chapter_02/reverse.html">
反向代理
</a>
</li>
<li class="chapter " data-level="1.2.10" data-path="../chapter_02/05_transport.html">
<a href="../chapter_02/05_transport.html">
传输配置
</a>
<ul class="articles">
<li class="chapter " data-level="1.2.10.1" data-path="../chapter_02/transport/tcp.html">
<a href="../chapter_02/transport/tcp.html">
TCP
</a>
</li>
<li class="chapter " data-level="1.2.10.2" data-path="../chapter_02/transport/mkcp.html">
<a href="../chapter_02/transport/mkcp.html">
mKCP
</a>
</li>
<li class="chapter " data-level="1.2.10.3" data-path="../chapter_02/transport/websocket.html">
<a href="../chapter_02/transport/websocket.html">
WebSocket
</a>
</li>
<li class="chapter " data-level="1.2.10.4" data-path="../chapter_02/transport/h2.html">
<a href="../chapter_02/transport/h2.html">
HTTP/2
</a>
</li>
<li class="chapter " data-level="1.2.10.5" data-path="../chapter_02/transport/domainsocket.html">
<a href="../chapter_02/transport/domainsocket.html">
DomainSocket
</a>
</li>
<li class="chapter " data-level="1.2.10.6" data-path="../chapter_02/transport/quic.html">
<a href="../chapter_02/transport/quic.html">
QUIC
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.2.11" data-path="../chapter_02/env.html">
<a href="../chapter_02/env.html">
环境变量
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.3" data-path="../awesome/tools.html">
<a href="../awesome/tools.html">
神一样的工具们
</a>
<ul class="articles">
<li class="chapter " data-level="1.3.1" data-path="../awesome/ads.html">
<a href="../awesome/ads.html">
以及广告
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.4" data-path="../developer/">
<a href="../developer/">
开发人员手册
</a>
<ul class="articles">
<li class="chapter " data-level="1.4.1" data-path="../developer/intro/roadmap.html">
<a href="../developer/intro/roadmap.html">
开发计划
</a>
</li>
<li class="chapter " data-level="1.4.2" data-path="../developer/intro/guide.html">
<a href="../developer/intro/guide.html">
开发指引
</a>
</li>
<li class="chapter " data-level="1.4.3" data-path="../developer/intro/design.html">
<a href="../developer/intro/design.html">
核心设计
</a>
</li>
<li class="chapter " data-level="1.4.4" data-path="../developer/intro/compile.html">
<a href="../developer/intro/compile.html">
配置开发环境
</a>
</li>
<li class="chapter " data-level="1.4.5" data-path="../developer/intro/tools.html">
<a href="../developer/intro/tools.html">
开发工具
</a>
</li>
<li class="chapter " data-level="1.4.6" >
<span>
协议细节
</span>
<ul class="articles">
<li class="chapter " data-level="1.4.6.1" data-path="../developer/protocols/vmess.html">
<a href="../developer/protocols/vmess.html">
VMess 协议
</a>
</li>
<li class="chapter " data-level="1.4.6.2" data-path="../developer/protocols/mkcp.html">
<a href="../developer/protocols/mkcp.html">
mKCP 协议
</a>
</li>
<li class="chapter " data-level="1.4.6.3" data-path="../developer/protocols/muxcool.html">
<a href="../developer/protocols/muxcool.html">
Mux.Cool
</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="divider"></li>
<li>
<a href="https://www.gitbook.com" target="blank" class="gitbook-link">
本書使用 GitBook 釋出
</a>
</li>
</ul>
</nav>
</div>
<div class="book-body">
<div class="body-inner">
<div class="book-header" role="navigation">
<a class="btn pull-left" href="/chapter_00/02_donate.html" target="_blank">
<img src="/resources/flag_cn.svg" alt="Chinese" height="16">
</a>
<a class="btn pull-left" href="/en/welcome/donate.html" target="_blank">
<img src="/resources/flag_en.svg" alt="English" height="16">
</a>
<a class="btn pull-left" href="/ru/welcome/donate.html" target="_blank">
<img src="/resources/flag_ru.svg" alt="Russian" height="16">
</a>
<a class="btn pull-left" href="/ko/welcome/donate.html" target="_blank">
<img src="/resources/flag_ko.svg" alt="Korean" height="16">
</a>
<a class="btn pull-left" href="/fa/welcome/donate.html" target="_blank">
<img src="/resources/flag_fa.svg" alt="Persian" height="16">
</a>
<a class="btn pull-left" href="/vi/welcome/donate.html" target="_blank">
<img src="/resources/flag_vi.svg" alt="Vietnamese" height="16">
</a>
<a class="btn pull-left" href="https://crowdin.com/project/v2ray" target="_blank">
<img src="/resources/translate.png" alt="Translate" height="16">
</a>
</div>
<div class="page-wrapper" tabindex="-1" role="main">
<div class="page-inner">
<section class="normal markdown-section">
<h1 id="资助-v2ray-发展"><a name="资助-v2ray-发展" class="plugin-anchor" href="#资助-v2ray-发展"><i class="fa fa-link" aria-hidden="true"></i></a>资助 V2Ray 发展</h1>
<p>V2Ray 是一个非营利项目,它的所有代码均公开,软件可以自由使用,不受限制。如果您喜爱本项目,可以通过下面的方式请作者喝一杯咖啡。</p>
<p>您的捐款是对 Project V 的无偿贡献,和 Project V 提供的技术和服务没有直接关联。对于每一份捐款,我们都会以邮件的方式确认。如果你不希望收到我们的邮件,请在捐款时留言注明。</p>
<p>对于单次捐赠的价值超过 $50,您可以从如下选项中指定一项:</p>
<ul>
<li>为期一个月的首页广告 (您的名字,或 Logo);</li>
<li>按您的喜好修改我们的代码。限制:不可影响用户使用,不可影响文档。您的修改将保留一个月。</li>
</ul>
<h2 id="usual-way"><a name="usual-way" class="plugin-anchor" href="#usual-way"><i class="fa fa-link" aria-hidden="true"></i></a>传统方式 </h2>
<blockquote>
<p>Paypal</p>
</blockquote>
<p>可以通过 <a href="https://www.paypal.me/ProjectV2Ray/25" target="_blank">Paypal 内部转帐</a> 或者<a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&amount=25&currency_code=usd&hosted_button_id=4TU3UKYANT2WY" target="_blank">信用卡</a>的方式捐赠。</p>
<p>由于 Paypal 收取非常高的手续费,小于 1 美元的捐赠会变得没有意义。</p>
<blockquote>
<p>Patreon</p>
</blockquote>
<p><a href="https://www.patreon.com/v2ray" target="_blank">Patreon</a> 是一个定期投食的平台,即每月捐赠固定金额。一旦设定完毕,每个月都会收到我们的小礼物哦。</p>
<blockquote>
<p>礼品卡</p>
</blockquote>
<p>目前只支持美亚礼品卡,可在 <a href="https://www.amazon.com/Amazon-eGift-Card-Birthday-Balloons/dp/B01FIS88SY" target="_blank">Amazon</a> 或者<a href="https://s.taobao.com/search?q=%E7%BE%8E%E4%BA%9A%E7%A4%BC%E5%93%81%E5%8D%A1" target="_blank">淘宝</a>购买。请寄送至<code>love@v2ray.com</code>。</p>
<h2 id="crypto"><a name="crypto" class="plugin-anchor" href="#crypto"><i class="fa fa-link" aria-hidden="true"></i></a>极客方式 </h2>
<p>相比起传统方式,加密货币更适合跨境支付。加密货币通常都是匿名持有,其交易也很难被跟踪。</p>
<p>由于加密货币天生的匿名特性,如果有必要的话,请事先联系项目组表明捐赠者的身份。</p>
<blockquote>
<p>比特币 Bitcoin</p>
</blockquote>
<p>地址: <code>3GctrB7R5sMhJ73N4AKo56Bdf9RE3RJsuM</code></p>
<p>点此<a href="https://www.blockchain.com/btc/address/3GctrB7R5sMhJ73N4AKo56Bdf9RE3RJsuM" target="_blank">链接</a>显示二维码</p>
<blockquote>
<p>比特现金 Bitcoin Cash</p>
</blockquote>
<p>地址: <code>15oATKUq5mEfuzasPnsJ58TjJU5SvDJK97</code></p>
<p>点此<a href="https://explorer.bitcoin.com/bch/address/15oATKUq5mEfuzasPnsJ58TjJU5SvDJK97" target="_blank">链接</a>显示二维码</p>
<blockquote>
<p>以太坊 Ethereum</p>
</blockquote>
<p>地址: <code>0x112ee71189704fe04cabed4aa045f4461c8c8696</code></p>
<p>点此<a href="https://www.blockchain.com/eth/address/0x112ee71189704fe04cabed4aa045f4461c8c8696" target="_blank">链接</a>显示二维码。你也可以通过这个地址发送这些货币:OMG、REP、GNT、DGD</p>
<blockquote>
<p>EOS</p>
</blockquote>
<p>地址: <code>EOS8Civdok4CBN3jCpsaGQijzesjKof1eyaRFuBU5mLMtWVkLsy8a</code></p>
<blockquote>
<p>莱特币 Litecoin</p>
</blockquote>
<p>地址: <code>LVdeH2HkCgGRs8ZEpan7fkAEEPbiJ4McoR</code></p>
<blockquote>
<p>门罗币 Monero</p>
</blockquote>
<p>地址: <code>48kA4NyLRCWQvB7U2A77G66Z25uWbyzmoZSYjxJfrMR1J4dRFW6fWFLDn3wirAqP8ySnR4rnvoXWxfkNFhrK5ZxY1WyBqKg</code></p>
<blockquote>
<p>瑞波币 Ripple</p>
</blockquote>
<p>地址: <code>r439fPk8DzCf4nSxkpfodEuE2cG4KVZQHq</code></p>
<p>不需要 Tag</p>
<blockquote>
<p>其它</p>
</blockquote>
<p>如果你想捐赠其它的加密货币,请联系我们: <code>love@v2ray.com</code>。</p>
</section>
</div>
</div>
</div>
</div>
<script>
var gitbook = gitbook || [];
gitbook.push(function() {
gitbook.page.hasChanged({"page":{"refcn":"chapter_00/02_donate","refen":"welcome/donate","title":"捐助支持","level":"1.1.6","depth":2,"next":{"title":"寻求帮助","level":"1.1.7","depth":2,"path":"chapter_00/help.md","ref":"chapter_00/help.md","articles":[]},"previous":{"title":"命令行参数","level":"1.1.5","depth":2,"path":"chapter_00/command.md","ref":"chapter_00/command.md","articles":[]},"dir":"ltr"},"config":{"plugins":["-fontsettings","-search","-lunr","-highlight","-sharing","mermaid-gb3","anchors","ga","prism","prism-themes","hints"],"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"pluginsConfig":{"ga":{"configuration":"auto","token":"UA-73620536-1"},"prism":{"css":["prism-themes/themes/prism-base16-ateliersulphurpool.light.css"],"lang":{"objc":"objectivec","shell":"bash","text":"textile","plain":"textile"}},"mermaid-gb3":{},"anchors":{},"prism-themes":{},"hints":{"danger":"fa fa-exclamation-circle","info":"fa fa-info-circle","tip":"fa fa-mortar-board","working":"fa fa-wrench"},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Project V 官方网站","language":"zh","gitbook":"*"},"file":{"path":"chapter_00/02_donate.md","mtime":"2019-12-09T02:03:16.155Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2019-12-09T02:05:14.919Z"},"basePath":"..","book":{"language":""}});
});
</script>
</div>
<script src="../gitbook/gitbook.js"></script>
<script src="../gitbook/theme.js"></script>
<script src="../gitbook/gitbook-plugin-mermaid-gb3/book/plugin.js"></script>
<script src="../gitbook/gitbook-plugin-ga/plugin.js"></script>
<script src="../gitbook/gitbook-plugin-mermaid-gb3/mermaid/mermaid.min.js"></script>
</body>
</html>
================================================
FILE: chapter_00/command.html
================================================
<!DOCTYPE HTML>
<html lang="zh" >
<head>
<meta charset="UTF-8">
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<title>命令行参数 · Project V 官方网站</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<script type="text/javascript">
function inIframe () {
try { return window.self !== window.top; } catch (e) { return true; }
}
function isValidDomain() {
var host = window.location.hostname;
var domains = ['v2ray.com', 'github.io', 'mux.cool', 'v2ray.cool', 'archive.org'];
for (var dx in domains) {
if (host.indexOf(domains[dx]) >= 0) {
return true;
}
}
return false;
}
if (inIframe() || !isValidDomain()) {
window.top.location.href = 'https://www.v2ray.com/';
}
</script>
<link rel="stylesheet" href="../gitbook/style.css">
<link rel="stylesheet" href="../gitbook/gitbook-plugin-mermaid-gb3/mermaid/mermaid.css">
<link rel="stylesheet" href="../gitbook/gitbook-plugin-anchors/plugin.css">
<link rel="stylesheet" href="../gitbook/gitbook-plugin-prism/prism-base16-ateliersulphurpool.light.css">
<link rel="stylesheet" href="../gitbook/gitbook-plugin-hints/plugin-hints.css">
<link rel="stylesheet" href="../styles/website.css">
<meta name="HandheldFriendly" content="true"/>
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<link rel="apple-touch-icon-precomposed" sizes="152x152" type="image/png" href="/resources/favicon-152.png">
<link rel="apple-touch-icon-precomposed" sizes="180x180" type="image/png" href="/resources/favicon-180.png">
<link rel="icon" type="image/png" href="/resources/favicon-192.png">
<link rel="shortcut icon" href="/resources/favicon.ico" type="image/x-icon">
<link href="https://fonts.loli.net/css?family=Source+Code+Pro:400|Open+Sans:400,700&subset=cyrillic" rel="stylesheet">
<link rel="next" href="02_donate.html" />
<link rel="prev" href="start.html" />
</head>
<body>
<div class="book">
<div class="book-summary">
<nav role="navigation">
<ul class="summary">
<li class="chapter " data-level="1.1" data-path="../">
<a href="../">
Project V
</a>
<ul class="articles">
<li class="chapter " data-level="1.1.1" data-path="01_versions.html">
<a href="01_versions.html">
版本历史
</a>
</li>
<li class="chapter " data-level="1.1.2" data-path="workflow.html">
<a href="workflow.html">
使用方式
</a>
</li>
<li class="chapter " data-level="1.1.3" data-path="install.html">
<a href="install.html">
下载安装
</a>
</li>
<li class="chapter " data-level="1.1.4" data-path="start.html">
<a href="start.html">
新手上路
</a>
</li>
<li class="chapter active" data-level="1.1.5" data-path="command.html">
<a href="command.html">
命令行参数
</a>
</li>
<li class="chapter " data-level="1.1.6" data-path="02_donate.html">
<a href="02_donate.html">
捐助支持
</a>
</li>
<li class="chapter " data-level="1.1.7" data-path="help.html">
<a href="help.html">
寻求帮助
</a>
</li>
<li class="chapter " data-level="1.1.8" data-path="faq.html">
<a href="faq.html">
常见问题
</a>
</li>
<li class="chapter " data-level="1.1.9" >
<a target="_blank" href="https://steemit.com/@v2ray">
博客↪
</a>
</li>
<li class="chapter " data-level="1.1.10" >
<a target="_blank" href="https://toutyrater.github.io/">
白话文教程↪
</a>
</li>
<li class="chapter " data-level="1.1.11" >
<a target="_blank" href="https://guide.v2fly.org/">
新白话文教程(社区版)↪
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.2" data-path="../chapter_02/">
<a href="../chapter_02/">
配置文件
</a>
<ul class="articles">
<li class="chapter " data-level="1.2.1" data-path="../chapter_02/01_overview.html">
<a href="../chapter_02/01_overview.html">
文件格式
</a>
</li>
<li class="chapter " data-level="1.2.2" data-path="../chapter_02/02_protocols.html">
<a href="../chapter_02/02_protocols.html">
协议列表
</a>
<ul class="articles">
<li class="chapter " data-level="1.2.2.1" data-path="../chapter_02/protocols/blackhole.html">
<a href="../chapter_02/protocols/blackhole.html">
Blackhole
</a>
</li>
<li class="chapter " data-level="1.2.2.2" data-path="../chapter_02/protocols/dns.html">
<a href="../chapter_02/protocols/dns.html">
DNS
</a>
</li>
<li class="chapter " data-level="1.2.2.3" data-path="../chapter_02/protocols/dokodemo.html">
<a href="../chapter_02/protocols/dokodemo.html">
Dokodemo
</a>
</li>
<li class="chapter " data-level="1.2.2.4" data-path="../chapter_02/protocols/freedom.html">
<a href="../chapter_02/protocols/freedom.html">
Freedom
</a>
</li>
<li class="chapter " data-level="1.2.2.5" data-path="../chapter_02/protocols/http.html">
<a href="../chapter_02/protocols/http.html">
HTTP
</a>
</li>
<li class="chapter " data-level="1.2.2.6" data-path="../chapter_02/protocols/mtproto.html">
<a href="../chapter_02/protocols/mtproto.html">
MTProto
</a>
</li>
<li class="chapter " data-level="1.2.2.7" data-path="../chapter_02/protocols/shadowsocks.html">
<a href="../chapter_02/protocols/shadowsocks.html">
Shadowsocks
</a>
</li>
<li class="chapter " data-level="1.2.2.8" data-path="../chapter_02/protocols/socks.html">
<a href="../chapter_02/protocols/socks.html">
SOCKS
</a>
</li>
<li class="chapter " data-level="1.2.2.9" data-path="../chapter_02/protocols/vmess.html">
<a href="../chapter_02/protocols/vmess.html">
VMess
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.2.3" data-path="../chapter_02/policy.html">
<a href="../chapter_02/policy.html">
本地策略
</a>
</li>
<li class="chapter " data-level="1.2.4" data-path="../chapter_02/03_routing.html">
<a href="../chapter_02/03_routing.html">
路由配置
</a>
</li>
<li class="chapter " data-level="1.2.5" data-path="../chapter_02/04_dns.html">
<a href="../chapter_02/04_dns.html">
DNS 配置
</a>
</li>
<li class="chapter " data-level="1.2.6" data-path="../chapter_02/mux.html">
<a href="../chapter_02/mux.html">
Mux 配置
</a>
</li>
<li class="chapter " data-level="1.2.7" data-path="../chapter_02/api.html">
<a href="../chapter_02/api.html">
API 配置
</a>
</li>
<li class="chapter " data-level="1.2.8" data-path="../chapter_02/stats.html">
<a href="../chapter_02/stats.html">
统计信息
</a>
</li>
<li class="chapter " data-level="1.2.9" data-path="../chapter_02/reverse.html">
<a href="../chapter_02/reverse.html">
反向代理
</a>
</li>
<li class="chapter " data-level="1.2.10" data-path="../chapter_02/05_transport.html">
<a href="../chapter_02/05_transport.html">
传输配置
</a>
<ul class="articles">
<li class="chapter " data-level="1.2.10.1" data-path="../chapter_02/transport/tcp.html">
<a href="../chapter_02/transport/tcp.html">
TCP
</a>
</li>
<li class="chapter " data-level="1.2.10.2" data-path="../chapter_02/transport/mkcp.html">
<a href="../chapter_02/transport/mkcp.html">
mKCP
</a>
</li>
<li class="chapter " data-level="1.2.10.3" data-path="../chapter_02/transport/websocket.html">
<a href="../chapter_02/transport/websocket.html">
WebSocket
</a>
</li>
<li class="chapter " data-level="1.2.10.4" data-path="../chapter_02/transport/h2.html">
<a href="../chapter_02/transport/h2.html">
HTTP/2
</a>
</li>
<li class="chapter " data-level="1.2.10.5" data-path="../chapter_02/transport/domainsocket.html">
<a href="../chapter_02/transport/domainsocket.html">
DomainSocket
</a>
</li>
<li class="chapter " data-level="1.2.10.6" data-path="../chapter_02/transport/quic.html">
<a href="../chapter_02/transport/quic.html">
QUIC
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.2.11" data-path="../chapter_02/env.html">
<a href="../chapter_02/env.html">
环境变量
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.3" data-path="../awesome/tools.html">
<a href="../awesome/tools.html">
神一样的工具们
</a>
<ul class="articles">
<li class="chapter " data-level="1.3.1" data-path="../awesome/ads.html">
<a href="../awesome/ads.html">
以及广告
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.4" data-path="../developer/">
<a href="../developer/">
开发人员手册
</a>
<ul class="articles">
<li class="chapter " data-level="1.4.1" data-path="../developer/intro/roadmap.html">
<a href="../developer/intro/roadmap.html">
开发计划
</a>
</li>
<li class="chapter " data-level="1.4.2" data-path="../developer/intro/guide.html">
<a href="../developer/intro/guide.html">
开发指引
</a>
</li>
<li class="chapter " data-level="1.4.3" data-path="../developer/intro/design.html">
<a href="../developer/intro/design.html">
核心设计
</a>
</li>
<li class="chapter " data-level="1.4.4" data-path="../developer/intro/compile.html">
<a href="../developer/intro/compile.html">
配置开发环境
</a>
</li>
<li class="chapter " data-level="1.4.5" data-path="../developer/intro/tools.html">
<a href="../developer/intro/tools.html">
开发工具
</a>
</li>
<li class="chapter " data-level="1.4.6" >
<span>
协议细节
</span>
<ul class="articles">
<li class="chapter " data-level="1.4.6.1" data-path="../developer/protocols/vmess.html">
<a href="../developer/protocols/vmess.html">
VMess 协议
</a>
</li>
<li class="chapter " data-level="1.4.6.2" data-path="../developer/protocols/mkcp.html">
<a href="../developer/protocols/mkcp.html">
mKCP 协议
</a>
</li>
<li class="chapter " data-level="1.4.6.3" data-path="../developer/protocols/muxcool.html">
<a href="../developer/protocols/muxcool.html">
Mux.Cool
</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="divider"></li>
<li>
<a href="https://www.gitbook.com" target="blank" class="gitbook-link">
本書使用 GitBook 釋出
</a>
</li>
</ul>
</nav>
</div>
<div class="book-body">
<div class="body-inner">
<div class="book-header" role="navigation">
<a class="btn pull-left" href="/chapter_00/command.html" target="_blank">
<img src="/resources/flag_cn.svg" alt="Chinese" height="16">
</a>
<a class="btn pull-left" href="/en/welcome/command.html" target="_blank">
<img src="/resources/flag_en.svg" alt="English" height="16">
</a>
<a class="btn pull-left" href="/ru/welcome/command.html" target="_blank">
<img src="/resources/flag_ru.svg" alt="Russian" height="16">
</a>
<a class="btn pull-left" href="/ko/welcome/command.html" target="_blank">
<img src="/resources/flag_ko.svg" alt="Korean" height="16">
</a>
<a class="btn pull-left" href="/fa/welcome/command.html" target="_blank">
<img src="/resources/flag_fa.svg" alt="Persian" height="16">
</a>
<a class="btn pull-left" href="/vi/welcome/command.html" target="_blank">
<img src="/resources/flag_vi.svg" alt="Vietnamese" height="16">
</a>
<a class="btn pull-left" href="https://crowdin.com/project/v2ray" target="_blank">
<img src="/resources/translate.png" alt="Translate" height="16">
</a>
</div>
<div class="page-wrapper" tabindex="-1" role="main">
<div class="page-inner">
<section class="normal markdown-section">
<h1 id="命令行参数"><a name="命令行参数" class="plugin-anchor" href="#命令行参数"><i class="fa fa-link" aria-hidden="true"></i></a>命令行参数</h1>
<h2 id="v2ray"><a name="v2ray" class="plugin-anchor" href="#v2ray"><i class="fa fa-link" aria-hidden="true"></i></a>V2Ray</h2>
<p>V2Ray 的程序文件的命令行参数如下:</p>
<pre class="language-"><code class="lang-bash">v2ray <span class="token punctuation">[</span>-version<span class="token punctuation">]</span> <span class="token punctuation">[</span>-test<span class="token punctuation">]</span> <span class="token punctuation">[</span>-config<span class="token operator">=</span>config.json<span class="token punctuation">]</span> <span class="token punctuation">[</span>-format<span class="token operator">=</span>json<span class="token punctuation">]</span>
</code></pre>
<blockquote>
<p><code>-version</code></p>
</blockquote>
<p>只输出当前版本然后退出,不运行 V2Ray 主程序。</p>
<blockquote>
<p><code>-test</code></p>
</blockquote>
<p>测试配置文件有效性,如果有问题则输出错误信息,不运行 V2Ray 主程序。</p>
<blockquote>
<p><code>-config</code></p>
</blockquote>
<p>配置文件路径,可选的形式如下:</p>
<ul>
<li>本地路径,可以是一个绝对路径,或者相对路径。</li>
<li><code>"stdin:"</code>: 表示将从标准输入读取配置文件内容,调用者必须在输入完毕后关闭标准输入流。</li>
<li>以<code>http://</code>或<code>https://</code>(均为小写)开头: V2Ray 将尝试从这个远程地址加载配置文件。</li>
</ul>
<blockquote>
<p><code>-format</code></p>
</blockquote>
<p>配置文件格式,可选的值有:</p>
<ul>
<li><code>json</code>: JSON 格式;</li>
<li><code>pb</code> 或 <code>protobuf</code>: Protobuf 格式;</li>
</ul>
<p><div class="alert alert-info hints-alert"><div class="hints-icon"><i class="fa fa-info-circle"></i></div><div class="hints-container"><p>当<code>-config</code>没有指定时,V2Ray 将先后尝试从以下路径加载<code>config.json</code>:</p>
<ul>
<li>工作目录(Working Directory)</li>
<li><a href="../chapter_02/env.html">环境变量</a>中<code>v2ray.location.asset</code>所指定的路径</li>
</ul>
</div></div></p>
<h2 id="v2ctl"><a name="v2ctl" class="plugin-anchor" href="#v2ctl"><i class="fa fa-link" aria-hidden="true"></i></a>V2Ctl</h2>
<p>V2Ctl 是一个集合,它有若干个子命令组成。全局的命令行形式如下:</p>
<pre class="language-"><code class="lang-bash">v2ctl <span class="token operator"><</span>command<span class="token operator">></span> <span class="token operator"><</span>options<span class="token operator">></span>
</code></pre>
<blockquote>
<p><code>command</code></p>
</blockquote>
<p>子命令,有以下选项:</p>
<ul>
<li><code>api</code>: 调用 V2Ray 进程的远程控制指令。</li>
<li><code>config</code>: 从标准输入读取 JSON 格式的配置,然后从标准输出打印 Protobuf 格式的配置。</li>
<li><code>cert</code>: 生成 TLS 证书。</li>
<li><code>fetch</code>: 抓取远程文件。</li>
<li><code>tlsping</code>: (V2Ray 4.17+) 尝试进行 TLS 握手。</li>
<li><code>verify</code>: 验证文件是否由 Project V 官方签名。</li>
<li><code>uuid</code>: 输出一个随机的 UUID。</li>
</ul>
<h3 id="v2ctl-api"><a name="v2ctl-api" class="plugin-anchor" href="#v2ctl-api"><i class="fa fa-link" aria-hidden="true"></i></a>V2Ctl Api</h3>
<p><code>v2ctl api [--server=127.0.0.1:8080] <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>Service.Method</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>Request</span><span class="token punctuation">></span></span></code></p>
<p>调用 V2Ray 进程的远程控制指令。示例:</p>
<p><code>v2ctl api --server=127.0.0.1:8080 LoggerService.RestartLogger ''</code></p>
<h3 id="v2ctl-config"><a name="v2ctl-config" class="plugin-anchor" href="#v2ctl-config"><i class="fa fa-link" aria-hidden="true"></i></a>V2Ctl Config</h3>
<p><code>v2ctl config</code></p>
<p>此命令没有参数。它从标准输入读取 JSON 格式的配置,然后从标准输出打印 Protobuf 格式的配置。</p>
<h3 id="v2ctl-cert"><a name="v2ctl-cert" class="plugin-anchor" href="#v2ctl-cert"><i class="fa fa-link" aria-hidden="true"></i></a>V2Ctl Cert</h3>
<p><code>v2ctl cert [--ca] [--domain=v2ray.com] [--expire=240h] [--name="V2Ray Inc"] [--org="V2Ray Inc] [--json] [--file=v2ray]</code></p>
<p>生成一个 TLS 证书。</p>
<blockquote>
<p><code>--ca</code></p>
</blockquote>
<p>如果指定此选项,将会生成一个 CA 证书。</p>
<blockquote>
<p><code>--domain</code></p>
</blockquote>
<p>证书的 Alternative Name 项。该参数可以多次使用,来指定多个域名。比如<code>--domain=v2ray.com --domain=v2ray.cool</code>。</p>
<blockquote>
<p><code>--expire</code></p>
</blockquote>
<p>证书有效期。格式为 Golang 的<a href="https://golang.org/pkg/time/#ParseDuration" target="_blank">时间长度</a>。</p>
<blockquote>
<p><code>--name</code></p>
</blockquote>
<p>证书的 Command Name 项。</p>
<blockquote>
<p><code>--org</code></p>
</blockquote>
<p>证书的 Orgnization 项。</p>
<blockquote>
<p><code>--json</code></p>
</blockquote>
<p>将生成的证书以 V2Ray 支持的 JSON 格式输出到标准输出。默认开启。</p>
<blockquote>
<p><code>--file</code></p>
</blockquote>
<p>将证书以 PEM 格式输出到文件。当指定 <code>--file=a</code> 时,将生成 <code>a_cert.pem</code> 和 <code>a_key.pem</code> 两个文件。</p>
<h3 id="v2ctl-fetch"><a name="v2ctl-fetch" class="plugin-anchor" href="#v2ctl-fetch"><i class="fa fa-link" aria-hidden="true"></i></a>V2Ctl Fetch</h3>
<p><code>v2ctl fetch <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>url</span><span class="token punctuation">></span></span></code></p>
<p>抓取指定的 URL 的内容并输出,只支持 HTTP 和 HTTPS。</p>
<h3 id="v2ctl-tlsping"><a name="v2ctl-tlsping" class="plugin-anchor" href="#v2ctl-tlsping"><i class="fa fa-link" aria-hidden="true"></i></a>V2Ctl TlsPing</h3>
<p><code>v2ctl tlsping <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>domain</span><span class="token punctuation">></span></span> --ip=[ip]</code></p>
<p>向指定的域名发起 TLS 握手。</p>
<blockquote>
<p>domain</p>
</blockquote>
<p>目标域名</p>
<blockquote>
<p>--ip</p>
</blockquote>
<p>此域名的 IP 地址。如果未指定此参数,V2Ctl 将使用系统的 DNS 进行域名解析。</p>
<h3 id="v2ctl-verify"><a name="v2ctl-verify" class="plugin-anchor" href="#v2ctl-verify"><i class="fa fa-link" aria-hidden="true"></i></a>V2Ctl Verify</h3>
<p><code>v2ctl verify [--sig=/path/to/sigfile] <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>filepath</span><span class="token punctuation">></span></span></code></p>
<p>此命令用于验证一个文件是否由 Project V 官方签名。</p>
<blockquote>
<p><code>--sig</code></p>
</blockquote>
<p>签名文件路径,默认值为待验证文件加入'.sig'后缀。</p>
<blockquote>
<p><code>filepath</code></p>
</blockquote>
<p>待验证文件路径。</p>
<h3 id="v2ctl-uuid"><a name="v2ctl-uuid" class="plugin-anchor" href="#v2ctl-uuid"><i class="fa fa-link" aria-hidden="true"></i></a>V2Ctl UUID</h3>
<p><code>v2ctl uuid</code></p>
<p>此命令没有参数。每次运行都会输出一个新的 UUID。</p>
</section>
</div>
</div>
</div>
</div>
<script>
var gitbook = gitbook || [];
gitbook.push(function() {
gitbook.page.hasChanged({"page":{"refcn":"chapter_00/command","refen":"welcome/command","title":"命令行参数","level":"1.1.5","depth":2,"next":{"title":"捐助支持","level":"1.1.6","depth":2,"path":"chapter_00/02_donate.md","ref":"chapter_00/02_donate.md","articles":[]},"previous":{"title":"新手上路","level":"1.1.4","depth":2,"path":"chapter_00/start.md","ref":"chapter_00/start.md","articles":[]},"dir":"ltr"},"config":{"plugins":["-fontsettings","-search","-lunr","-highlight","-sharing","mermaid-gb3","anchors","ga","prism","prism-themes","hints"],"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"pluginsConfig":{"ga":{"configuration":"auto","token":"UA-73620536-1"},"prism":{"css":["prism-themes/themes/prism-base16-ateliersulphurpool.light.css"],"lang":{"objc":"objectivec","shell":"bash","text":"textile","p
gitextract_ndww95gq/
├── .gitignore
├── CNAME
├── awesome/
│ ├── ads.html
│ └── tools.html
├── chapter_00/
│ ├── 01_versions.html
│ ├── 02_donate.html
│ ├── command.html
│ ├── faq.html
│ ├── help.html
│ ├── install.html
│ ├── start.html
│ └── workflow.html
├── chapter_02/
│ ├── 01_overview.html
│ ├── 02_protocols.html
│ ├── 03_routing.html
│ ├── 04_dns.html
│ ├── 05_transport.html
│ ├── api.html
│ ├── env.html
│ ├── index.html
│ ├── mux.html
│ ├── policy.html
│ ├── protocols/
│ │ ├── blackhole.html
│ │ ├── dns.html
│ │ ├── dokodemo.html
│ │ ├── freedom.html
│ │ ├── http.html
│ │ ├── mtproto.html
│ │ ├── shadowsocks.html
│ │ ├── socks.html
│ │ └── vmess.html
│ ├── reverse.html
│ ├── stats.html
│ └── transport/
│ ├── domainsocket.html
│ ├── h2.html
│ ├── mkcp.html
│ ├── quic.html
│ ├── tcp.html
│ └── websocket.html
├── core/
│ └── index.html
├── developer/
│ ├── index.html
│ ├── intro/
│ │ ├── compile.html
│ │ ├── design.html
│ │ ├── guide.html
│ │ ├── roadmap.html
│ │ └── tools.html
│ └── protocols/
│ ├── mkcp.html
│ ├── muxcool.html
│ └── vmess.html
├── en/
│ ├── awesome/
│ │ ├── ads.html
│ │ └── tools.html
│ ├── configuration/
│ │ ├── api.html
│ │ ├── dns.html
│ │ ├── env.html
│ │ ├── index.html
│ │ ├── mux.html
│ │ ├── overview.html
│ │ ├── policy.html
│ │ ├── protocols/
│ │ │ ├── blackhole.html
│ │ │ ├── dns.html
│ │ │ ├── dokodemo.html
│ │ │ ├── freedom.html
│ │ │ ├── http.html
│ │ │ ├── mtproto.html
│ │ │ ├── shadowsocks.html
│ │ │ ├── socks.html
│ │ │ └── vmess.html
│ │ ├── protocols.html
│ │ ├── reverse.html
│ │ ├── routing.html
│ │ ├── stats.html
│ │ ├── transport/
│ │ │ ├── domainsocket.html
│ │ │ ├── h2.html
│ │ │ ├── mkcp.html
│ │ │ ├── quic.html
│ │ │ ├── tcp.html
│ │ │ └── websocket.html
│ │ └── transport.html
│ ├── developer/
│ │ └── tools.html
│ ├── gitbook/
│ │ ├── fonts/
│ │ │ └── fontawesome/
│ │ │ └── FontAwesome.otf
│ │ ├── gitbook-plugin-anchors/
│ │ │ └── plugin.css
│ │ ├── gitbook-plugin-ga/
│ │ │ └── plugin.js
│ │ ├── gitbook-plugin-hints/
│ │ │ └── plugin-hints.css
│ │ ├── gitbook-plugin-mermaid-gb3/
│ │ │ ├── book/
│ │ │ │ └── plugin.js
│ │ │ └── mermaid/
│ │ │ ├── mermaid.css
│ │ │ └── mermaid.forest.css
│ │ ├── gitbook-plugin-prism/
│ │ │ ├── prism-a11y-dark.css
│ │ │ ├── prism-atom-dark.css
│ │ │ ├── prism-base16-ateliersulphurpool.light.css
│ │ │ ├── prism-cb.css
│ │ │ ├── prism-darcula.css
│ │ │ ├── prism-dracula.css
│ │ │ ├── prism-duotone-dark.css
│ │ │ ├── prism-duotone-earth.css
│ │ │ ├── prism-duotone-forest.css
│ │ │ ├── prism-duotone-light.css
│ │ │ ├── prism-duotone-sea.css
│ │ │ ├── prism-duotone-space.css
│ │ │ ├── prism-ghcolors.css
│ │ │ ├── prism-hopscotch.css
│ │ │ ├── prism-material-dark.css
│ │ │ ├── prism-material-light.css
│ │ │ ├── prism-material-oceanic.css
│ │ │ ├── prism-pojoaque.css
│ │ │ ├── prism-shades-of-purple.css
│ │ │ ├── prism-synthwave84.css
│ │ │ ├── prism-vs.css
│ │ │ └── prism-xonokai.css
│ │ ├── gitbook.js
│ │ ├── style.css
│ │ └── theme.js
│ ├── index.html
│ ├── styles/
│ │ └── website.css
│ └── welcome/
│ ├── command.html
│ ├── donate.html
│ ├── faq.html
│ ├── help.html
│ ├── install.html
│ ├── start.html
│ ├── versions.html
│ └── workflow.html
├── ext/
│ └── index.html
├── fa/
│ ├── awesome/
│ │ ├── ads.html
│ │ └── tools.html
│ ├── configuration/
│ │ ├── api.html
│ │ ├── dns.html
│ │ ├── env.html
│ │ ├── index.html
│ │ ├── mux.html
│ │ ├── overview.html
│ │ ├── policy.html
│ │ ├── protocols/
│ │ │ ├── blackhole.html
│ │ │ ├── dns.html
│ │ │ ├── dokodemo.html
│ │ │ ├── freedom.html
│ │ │ ├── http.html
│ │ │ ├── mtproto.html
│ │ │ ├── shadowsocks.html
│ │ │ ├── socks.html
│ │ │ └── vmess.html
│ │ ├── protocols.html
│ │ ├── reverse.html
│ │ ├── routing.html
│ │ ├── stats.html
│ │ ├── transport/
│ │ │ ├── domainsocket.html
│ │ │ ├── h2.html
│ │ │ ├── mkcp.html
│ │ │ ├── quic.html
│ │ │ ├── tcp.html
│ │ │ └── websocket.html
│ │ └── transport.html
│ ├── developer/
│ │ └── tools.html
│ ├── gitbook/
│ │ ├── fonts/
│ │ │ └── fontawesome/
│ │ │ └── FontAwesome.otf
│ │ ├── gitbook-plugin-anchors/
│ │ │ └── plugin.css
│ │ ├── gitbook-plugin-ga/
│ │ │ └── plugin.js
│ │ ├── gitbook-plugin-hints/
│ │ │ └── plugin-hints.css
│ │ ├── gitbook-plugin-mermaid-gb3/
│ │ │ ├── book/
│ │ │ │ └── plugin.js
│ │ │ └── mermaid/
│ │ │ ├── mermaid.css
│ │ │ └── mermaid.forest.css
│ │ ├── gitbook-plugin-prism/
│ │ │ ├── prism-a11y-dark.css
│ │ │ ├── prism-atom-dark.css
│ │ │ ├── prism-base16-ateliersulphurpool.light.css
│ │ │ ├── prism-cb.css
│ │ │ ├── prism-darcula.css
│ │ │ ├── prism-dracula.css
│ │ │ ├── prism-duotone-dark.css
│ │ │ ├── prism-duotone-earth.css
│ │ │ ├── prism-duotone-forest.css
│ │ │ ├── prism-duotone-light.css
│ │ │ ├── prism-duotone-sea.css
│ │ │ ├── prism-duotone-space.css
│ │ │ ├── prism-ghcolors.css
│ │ │ ├── prism-hopscotch.css
│ │ │ ├── prism-material-dark.css
│ │ │ ├── prism-material-light.css
│ │ │ ├── prism-material-oceanic.css
│ │ │ ├── prism-pojoaque.css
│ │ │ ├── prism-shades-of-purple.css
│ │ │ ├── prism-synthwave84.css
│ │ │ ├── prism-vs.css
│ │ │ └── prism-xonokai.css
│ │ ├── gitbook.js
│ │ ├── style.css
│ │ └── theme.js
│ ├── index.html
│ ├── styles/
│ │ └── website.css
│ ├── ui_client/
│ │ ├── README.md
│ │ ├── android.md
│ │ ├── ios.md
│ │ ├── osx.md
│ │ ├── service.md
│ │ └── windows.md
│ └── welcome/
│ ├── command.html
│ ├── donate.html
│ ├── faq.html
│ ├── help.html
│ ├── install.html
│ ├── license.md
│ ├── pgp.md
│ ├── start.html
│ ├── tg.md
│ ├── versions.html
│ └── workflow.html
├── gitbook/
│ ├── fonts/
│ │ └── fontawesome/
│ │ └── FontAwesome.otf
│ ├── gitbook-plugin-anchors/
│ │ └── plugin.css
│ ├── gitbook-plugin-ga/
│ │ └── plugin.js
│ ├── gitbook-plugin-hints/
│ │ └── plugin-hints.css
│ ├── gitbook-plugin-mermaid-gb3/
│ │ ├── book/
│ │ │ └── plugin.js
│ │ └── mermaid/
│ │ ├── mermaid.css
│ │ └── mermaid.forest.css
│ ├── gitbook-plugin-prism/
│ │ ├── prism-a11y-dark.css
│ │ ├── prism-atom-dark.css
│ │ ├── prism-base16-ateliersulphurpool.light.css
│ │ ├── prism-cb.css
│ │ ├── prism-darcula.css
│ │ ├── prism-dracula.css
│ │ ├── prism-duotone-dark.css
│ │ ├── prism-duotone-earth.css
│ │ ├── prism-duotone-forest.css
│ │ ├── prism-duotone-light.css
│ │ ├── prism-duotone-sea.css
│ │ ├── prism-duotone-space.css
│ │ ├── prism-ghcolors.css
│ │ ├── prism-hopscotch.css
│ │ ├── prism-material-dark.css
│ │ ├── prism-material-light.css
│ │ ├── prism-material-oceanic.css
│ │ ├── prism-pojoaque.css
│ │ ├── prism-shades-of-purple.css
│ │ ├── prism-synthwave84.css
│ │ ├── prism-vs.css
│ │ └── prism-xonokai.css
│ ├── gitbook.js
│ ├── style.css
│ └── theme.js
├── index.html
├── ko/
│ ├── awesome/
│ │ ├── ads.html
│ │ └── tools.html
│ ├── configuration/
│ │ ├── api.html
│ │ ├── dns.html
│ │ ├── env.html
│ │ ├── index.html
│ │ ├── mux.html
│ │ ├── overview.html
│ │ ├── policy.html
│ │ ├── protocols/
│ │ │ ├── blackhole.html
│ │ │ ├── dns.html
│ │ │ ├── dokodemo.html
│ │ │ ├── freedom.html
│ │ │ ├── http.html
│ │ │ ├── mtproto.html
│ │ │ ├── shadowsocks.html
│ │ │ ├── socks.html
│ │ │ └── vmess.html
│ │ ├── protocols.html
│ │ ├── reverse.html
│ │ ├── routing.html
│ │ ├── stats.html
│ │ ├── transport/
│ │ │ ├── domainsocket.html
│ │ │ ├── h2.html
│ │ │ ├── mkcp.html
│ │ │ ├── quic.html
│ │ │ ├── tcp.html
│ │ │ └── websocket.html
│ │ └── transport.html
│ ├── developer/
│ │ └── tools.html
│ ├── gitbook/
│ │ ├── fonts/
│ │ │ └── fontawesome/
│ │ │ └── FontAwesome.otf
│ │ ├── gitbook-plugin-anchors/
│ │ │ └── plugin.css
│ │ ├── gitbook-plugin-ga/
│ │ │ └── plugin.js
│ │ ├── gitbook-plugin-hints/
│ │ │ └── plugin-hints.css
│ │ ├── gitbook-plugin-mermaid-gb3/
│ │ │ ├── book/
│ │ │ │ └── plugin.js
│ │ │ └── mermaid/
│ │ │ ├── mermaid.css
│ │ │ └── mermaid.forest.css
│ │ ├── gitbook-plugin-prism/
│ │ │ ├── prism-a11y-dark.css
│ │ │ ├── prism-atom-dark.css
│ │ │ ├── prism-base16-ateliersulphurpool.light.css
│ │ │ ├── prism-cb.css
│ │ │ ├── prism-darcula.css
│ │ │ ├── prism-dracula.css
│ │ │ ├── prism-duotone-dark.css
│ │ │ ├── prism-duotone-earth.css
│ │ │ ├── prism-duotone-forest.css
│ │ │ ├── prism-duotone-light.css
│ │ │ ├── prism-duotone-sea.css
│ │ │ ├── prism-duotone-space.css
│ │ │ ├── prism-ghcolors.css
│ │ │ ├── prism-hopscotch.css
│ │ │ ├── prism-material-dark.css
│ │ │ ├── prism-material-light.css
│ │ │ ├── prism-material-oceanic.css
│ │ │ ├── prism-pojoaque.css
│ │ │ ├── prism-shades-of-purple.css
│ │ │ ├── prism-synthwave84.css
│ │ │ ├── prism-vs.css
│ │ │ └── prism-xonokai.css
│ │ ├── gitbook.js
│ │ ├── style.css
│ │ └── theme.js
│ ├── index.html
│ ├── styles/
│ │ └── website.css
│ ├── ui_client/
│ │ ├── README.md
│ │ ├── android.md
│ │ ├── ios.md
│ │ ├── osx.md
│ │ ├── service.md
│ │ └── windows.md
│ └── welcome/
│ ├── command.html
│ ├── donate.html
│ ├── faq.html
│ ├── help.html
│ ├── install.html
│ ├── start.html
│ ├── versions.html
│ └── workflow.html
├── links/
│ └── chinasites/
│ └── index.html
├── robots.txt
├── ru/
│ ├── awesome/
│ │ ├── ads.html
│ │ └── tools.html
│ ├── configuration/
│ │ ├── api.html
│ │ ├── dns.html
│ │ ├── env.html
│ │ ├── index.html
│ │ ├── mux.html
│ │ ├── overview.html
│ │ ├── policy.html
│ │ ├── protocols/
│ │ │ ├── blackhole.html
│ │ │ ├── dns.html
│ │ │ ├── dokodemo.html
│ │ │ ├── freedom.html
│ │ │ ├── http.html
│ │ │ ├── mtproto.html
│ │ │ ├── shadowsocks.html
│ │ │ ├── socks.html
│ │ │ └── vmess.html
│ │ ├── protocols.html
│ │ ├── reverse.html
│ │ ├── routing.html
│ │ ├── stats.html
│ │ ├── transport/
│ │ │ ├── domainsocket.html
│ │ │ ├── h2.html
│ │ │ ├── mkcp.html
│ │ │ ├── quic.html
│ │ │ ├── tcp.html
│ │ │ └── websocket.html
│ │ └── transport.html
│ ├── developer/
│ │ └── tools.html
│ ├── gitbook/
│ │ ├── fonts/
│ │ │ └── fontawesome/
│ │ │ └── FontAwesome.otf
│ │ ├── gitbook-plugin-anchors/
│ │ │ └── plugin.css
│ │ ├── gitbook-plugin-ga/
│ │ │ └── plugin.js
│ │ ├── gitbook-plugin-hints/
│ │ │ └── plugin-hints.css
│ │ ├── gitbook-plugin-mermaid-gb3/
│ │ │ ├── book/
│ │ │ │ └── plugin.js
│ │ │ └── mermaid/
│ │ │ ├── mermaid.css
│ │ │ └── mermaid.forest.css
│ │ ├── gitbook-plugin-prism/
│ │ │ ├── prism-a11y-dark.css
│ │ │ ├── prism-atom-dark.css
│ │ │ ├── prism-base16-ateliersulphurpool.light.css
│ │ │ ├── prism-cb.css
│ │ │ ├── prism-darcula.css
│ │ │ ├── prism-dracula.css
│ │ │ ├── prism-duotone-dark.css
│ │ │ ├── prism-duotone-earth.css
│ │ │ ├── prism-duotone-forest.css
│ │ │ ├── prism-duotone-light.css
│ │ │ ├── prism-duotone-sea.css
│ │ │ ├── prism-duotone-space.css
│ │ │ ├── prism-ghcolors.css
│ │ │ ├── prism-hopscotch.css
│ │ │ ├── prism-material-dark.css
│ │ │ ├── prism-material-light.css
│ │ │ ├── prism-material-oceanic.css
│ │ │ ├── prism-pojoaque.css
│ │ │ ├── prism-shades-of-purple.css
│ │ │ ├── prism-synthwave84.css
│ │ │ ├── prism-vs.css
│ │ │ └── prism-xonokai.css
│ │ ├── gitbook.js
│ │ ├── style.css
│ │ └── theme.js
│ ├── index.html
│ ├── styles/
│ │ └── website.css
│ ├── ui_client/
│ │ ├── README.md
│ │ ├── android.md
│ │ ├── ios.md
│ │ ├── osx.md
│ │ ├── service.md
│ │ └── windows.md
│ └── welcome/
│ ├── command.html
│ ├── donate.html
│ ├── faq.html
│ ├── help.html
│ ├── install.html
│ ├── license.md
│ ├── pgp.md
│ ├── start.html
│ ├── tg.md
│ ├── versions.html
│ └── workflow.html
├── styles/
│ └── website.css
└── vi/
├── awesome/
│ ├── ads.html
│ └── tools.html
├── configuration/
│ ├── api.html
│ ├── dns.html
│ ├── env.html
│ ├── index.html
│ ├── mux.html
│ ├── overview.html
│ ├── policy.html
│ ├── protocols/
│ │ ├── blackhole.html
│ │ ├── dns.html
│ │ ├── dokodemo.html
│ │ ├── freedom.html
│ │ ├── http.html
│ │ ├── mtproto.html
│ │ ├── shadowsocks.html
│ │ ├── socks.html
│ │ └── vmess.html
│ ├── protocols.html
│ ├── reverse.html
│ ├── routing.html
│ ├── stats.html
│ ├── transport/
│ │ ├── domainsocket.html
│ │ ├── h2.html
│ │ ├── mkcp.html
│ │ ├── quic.html
│ │ ├── tcp.html
│ │ └── websocket.html
│ └── transport.html
├── developer/
│ └── tools.html
├── gitbook/
│ ├── fonts/
│ │ └── fontawesome/
│ │ └── FontAwesome.otf
│ ├── gitbook-plugin-anchors/
│ │ └── plugin.css
│ ├── gitbook-plugin-ga/
│ │ └── plugin.js
│ ├── gitbook-plugin-hints/
│ │ └── plugin-hints.css
│ ├── gitbook-plugin-mermaid-gb3/
│ │ ├── book/
│ │ │ └── plugin.js
│ │ └── mermaid/
│ │ ├── mermaid.css
│ │ └── mermaid.forest.css
│ ├── gitbook-plugin-prism/
│ │ ├── prism-a11y-dark.css
│ │ ├── prism-atom-dark.css
│ │ ├── prism-base16-ateliersulphurpool.light.css
│ │ ├── prism-cb.css
│ │ ├── prism-darcula.css
│ │ ├── prism-dracula.css
│ │ ├── prism-duotone-dark.css
│ │ ├── prism-duotone-earth.css
│ │ ├── prism-duotone-forest.css
│ │ ├── prism-duotone-light.css
│ │ ├── prism-duotone-sea.css
│ │ ├── prism-duotone-space.css
│ │ ├── prism-ghcolors.css
│ │ ├── prism-hopscotch.css
│ │ ├── prism-material-dark.css
│ │ ├── prism-material-light.css
│ │ ├── prism-material-oceanic.css
│ │ ├── prism-pojoaque.css
│ │ ├── prism-shades-of-purple.css
│ │ ├── prism-synthwave84.css
│ │ ├── prism-vs.css
│ │ └── prism-xonokai.css
│ ├── gitbook.js
│ ├── style.css
│ └── theme.js
├── index.html
├── styles/
│ └── website.css
├── ui_client/
│ ├── README.md
│ ├── android.md
│ ├── ios.md
│ ├── osx.md
│ ├── service.md
│ └── windows.md
└── welcome/
├── command.html
├── donate.html
├── faq.html
├── help.html
├── install.html
├── start.html
├── versions.html
└── workflow.html
SYMBOL INDEX (1530 symbols across 12 files)
FILE: en/gitbook/gitbook.js
function o (line 1) | function o(s,a){if(!n[s]){if(!t[s]){var u="function"==typeof require&&re...
function n (line 1) | function n(e,t){t=t||te;var n=t.createElement("script");n.text=e,t.head....
function r (line 1) | function r(e){var t=!!e&&"length"in e&&e.length,n=de.type(e);return"func...
function o (line 1) | function o(e,t,n){return de.isFunction(t)?de.grep(e,function(e,r){return...
function i (line 1) | function i(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}
function s (line 1) | function s(e){var t={};return de.each(e.match(qe)||[],function(e,n){t[n]...
function a (line 1) | function a(e){return e}
function u (line 1) | function u(e){throw e}
function c (line 1) | function c(e,t,n){var r;try{e&&de.isFunction(r=e.promise)?r.call(e).done...
function l (line 1) | function l(){te.removeEventListener("DOMContentLoaded",l),e.removeEventL...
function f (line 1) | function f(){this.expando=de.expando+f.uid++}
function p (line 1) | function p(e){return"true"===e||"false"!==e&&("null"===e?null:e===+e+""?...
function h (line 1) | function h(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.rep...
function d (line 1) | function d(e,t,n,r){var o,i=1,s=20,a=r?function(){return r.cur()}:functi...
function g (line 1) | function g(e){var t,n=e.ownerDocument,r=e.nodeName,o=Ue[r];return o?o:(t...
function m (line 1) | function m(e,t){for(var n,r,o=[],i=0,s=e.length;i<s;i++)r=e[i],r.style&&...
function v (line 1) | function v(e,t){var n;return n="undefined"!=typeof e.getElementsByTagNam...
function y (line 1) | function y(e,t){for(var n=0,r=e.length;n<r;n++)Fe.set(e[n],"globalEval",...
function x (line 1) | function x(e,t,n,r,o){for(var i,s,a,u,c,l,f=t.createDocumentFragment(),p...
function b (line 1) | function b(){return!0}
function w (line 1) | function w(){return!1}
function T (line 1) | function T(){try{return te.activeElement}catch(e){}}
function C (line 1) | function C(e,t,n,r,o,i){var s,a;if("object"==typeof t){"string"!=typeof ...
function j (line 1) | function j(e,t){return de.nodeName(e,"table")&&de.nodeName(11!==t.nodeTy...
function k (line 1) | function k(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}
function E (line 1) | function E(e){var t=rt.exec(e.type);return t?e.type=t[1]:e.removeAttribu...
function S (line 1) | function S(e,t){var n,r,o,i,s,a,u,c;if(1===t.nodeType){if(Fe.hasData(e)&...
function N (line 1) | function N(e,t){var n=t.nodeName.toLowerCase();"input"===n&&ze.test(e.ty...
function A (line 1) | function A(e,t,r,o){t=oe.apply([],t);var i,s,a,u,c,l,f=0,p=e.length,h=p-...
function q (line 1) | function q(e,t,n){for(var r,o=t?de.filter(t,e):e,i=0;null!=(r=o[i]);i++)...
function D (line 1) | function D(e,t,n){var r,o,i,s,a=e.style;return n=n||at(e),n&&(s=n.getPro...
function O (line 1) | function O(e,t){return{get:function(){return e()?void delete this.get:(t...
function L (line 1) | function L(e){if(e in pt)return e;for(var t=e[0].toUpperCase()+e.slice(1...
function H (line 1) | function H(e,t,n){var r=$e.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3...
function F (line 1) | function F(e,t,n,r,o){var i,s=0;for(i=n===(r?"border":"content")?4:"widt...
function R (line 1) | function R(e,t,n){var r,o=!0,i=at(e),s="border-box"===de.css(e,"boxSizin...
function I (line 1) | function I(e,t,n,r,o){return new I.prototype.init(e,t,n,r,o)}
function P (line 1) | function P(){dt&&(e.requestAnimationFrame(P),de.fx.tick())}
function M (line 1) | function M(){return e.setTimeout(function(){ht=void 0}),ht=de.now()}
function $ (line 1) | function $(e,t){var n,r=0,o={height:e};for(t=t?1:0;r<4;r+=2-t)n=We[r],o[...
function W (line 1) | function W(e,t,n){for(var r,o=(U.tweeners[t]||[]).concat(U.tweeners["*"]...
function B (line 1) | function B(e,t,n){var r,o,i,s,a,u,c,l,f="width"in t||"height"in t,p=this...
function _ (line 1) | function _(e,t){var n,r,o,i,s;for(n in e)if(r=de.camelCase(n),o=t[r],i=e...
function U (line 1) | function U(e,t,n){var r,o,i=0,s=U.prefilters.length,a=de.Deferred().alwa...
function z (line 1) | function z(e){var t=e.match(qe)||[];return t.join(" ")}
function X (line 1) | function X(e){return e.getAttribute&&e.getAttribute("class")||""}
function V (line 1) | function V(e,t,n,r){var o;if(de.isArray(t))de.each(t,function(t,o){n||Et...
function G (line 1) | function G(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r...
function Y (line 1) | function Y(e,t,n,r){function o(a){var u;return i[a]=!0,de.each(e[a]||[],...
function Q (line 1) | function Q(e,t){var n,r,o=de.ajaxSettings.flatOptions||{};for(n in t)voi...
function J (line 1) | function J(e,t,n){for(var r,o,i,s,a=e.contents,u=e.dataTypes;"*"===u[0];...
function K (line 1) | function K(e,t,n,r){var o,i,s,a,u,c={},l=e.dataTypes.slice();if(l[1])for...
function Z (line 1) | function Z(e){return de.isWindow(e)?e:9===e.nodeType&&e.defaultView}
function t (line 1) | function t(e,t,n,r){var o,i,s,a,u,c,l,p=t&&t.ownerDocument,d=t?t.nodeTyp...
function n (line 1) | function n(){function e(n,r){return t.push(n+" ")>C.cacheLength&&delete ...
function r (line 1) | function r(e){return e[$]=!0,e}
function o (line 1) | function o(e){var t=L.createElement("fieldset");try{return!!e(t)}catch(e...
function i (line 1) | function i(e,t){for(var n=e.split("|"),r=n.length;r--;)C.attrHandle[n[r]...
function s (line 1) | function s(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.source...
function a (line 1) | function a(e){return function(t){var n=t.nodeName.toLowerCase();return"i...
function u (line 1) | function u(e){return function(t){var n=t.nodeName.toLowerCase();return("...
function c (line 1) | function c(e){return function(t){return"form"in t?t.parentNode&&t.disabl...
function l (line 1) | function l(e){return r(function(t){return t=+t,r(function(n,r){for(var o...
function f (line 1) | function f(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}
function p (line 1) | function p(){}
function h (line 1) | function h(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}
function d (line 1) | function d(e,t,n){var r=t.dir,o=t.next,i=o||r,s=n&&"parentNode"===i,a=_+...
function g (line 1) | function g(e){return e.length>1?function(t,n,r){for(var o=e.length;o--;)...
function m (line 1) | function m(e,n,r){for(var o=0,i=n.length;o<i;o++)t(e,n[o],r);return r}
function v (line 1) | function v(e,t,n,r,o){for(var i,s=[],a=0,u=e.length,c=null!=t;a<u;a++)(i...
function y (line 1) | function y(e,t,n,o,i,s){return o&&!o[$]&&(o=y(o)),i&&!i[$]&&(i=y(i,s)),r...
function x (line 1) | function x(e){for(var t,n,r,o=e.length,i=C.relative[e[0].type],s=i||C.re...
function b (line 1) | function b(e,n){var o=n.length>0,i=e.length>0,s=function(r,s,a,u,c){var ...
function i (line 2) | function i(t,n,r,o){return function(){var c=this,l=arguments,f=function(...
function t (line 2) | function t(){if(a){a.style.cssText="box-sizing:border-box;position:relat...
function r (line 3) | function r(t,n,r,a){var c,p,h,b,w,T=n;l||(l=!0,u&&e.clearTimeout(u),o=vo...
function t (line 3) | function t(e,t){for(var n=0,r=e.length-1;r>=0;r--){var o=e[r];"."===o?e....
function r (line 3) | function r(e,t){if(e.filter)return e.filter(t);for(var n=[],r=0;r<e.leng...
function r (line 3) | function r(e){for(var t=0;t<e.length&&""===e[t];t++);for(var n=e.length-...
function r (line 3) | function r(){throw new Error("setTimeout has not been defined")}
function o (line 3) | function o(){throw new Error("clearTimeout has not been defined")}
function i (line 3) | function i(e){if(f===setTimeout)return setTimeout(e,0);if((f===r||!f)&&s...
function s (line 3) | function s(e){if(p===clearTimeout)return clearTimeout(e);if((p===o||!p)&...
function a (line 3) | function a(){m&&d&&(m=!1,d.length?g=d.concat(g):v=-1,g.length&&u())}
function u (line 3) | function u(){if(!m){var e=i(a);m=!0;for(var t=g.length;t;){for(d=g,g=[];...
function c (line 3) | function c(e,t){this.fun=e,this.array=t}
function l (line 3) | function l(){}
function o (line 3) | function o(e){throw new RangeError(L[e])}
function i (line 3) | function i(e,t){for(var n=e.length,r=[];n--;)r[n]=t(e[n]);return r}
function s (line 3) | function s(e,t){var n=e.split("@"),r="";n.length>1&&(r=n[0]+"@",e=n[1]),...
function a (line 3) | function a(e){for(var t,n,r=[],o=0,i=e.length;o<i;)t=e.charCodeAt(o++),t...
function u (line 3) | function u(e){return i(e,function(e){var t="";return e>65535&&(e-=65536,...
function c (line 3) | function c(e){return e-48<10?e-22:e-65<26?e-65:e-97<26?e-97:T}
function l (line 3) | function l(e,t){return e+22+75*(e<26)-((0!=t)<<5)}
function f (line 3) | function f(e,t,n){var r=0;for(e=n?F(e/E):e>>1,e+=F(e/t);e>H*j>>1;r+=T)e=...
function p (line 3) | function p(e){var t,n,r,i,s,a,l,p,h,d,g=[],m=e.length,v=0,y=N,x=S;for(n=...
function h (line 3) | function h(e){var t,n,r,i,s,u,c,p,h,d,g,m,v,y,x,b=[];for(e=a(e),m=e.leng...
function d (line 3) | function d(e){return s(e,function(e){return q.test(e)?p(e.slice(4).toLow...
function g (line 3) | function g(e){return s(e,function(e){return D.test(e)?"xn--"+h(e):e})}
function r (line 3) | function r(e,t){return Object.prototype.hasOwnProperty.call(e,t)}
function r (line 3) | function r(e,t){if(e.map)return e.map(t);for(var n=[],r=0;r<e.length;r++...
function r (line 3) | function r(){this.protocol=null,this.slashes=null,this.auth=null,this.ho...
function o (line 3) | function o(e,t,n){
function i (line 4) | function i(e){return c.isString(e)&&(e=o(e)),e instanceof r?e.format():r...
function s (line 4) | function s(e,t){return o(e,!1,!0).resolve(t)}
function a (line 4) | function a(e,t){return e?o(e,!1,!0).resolveObject(t):t}
function r (line 4) | function r(e){console.log("page has changed",e),o(e),l||(l=!0,c.trigger(...
function o (line 4) | function o(e){f.page=e.page,f.file=e.file,f.gitbook=e.gitbook,f.config=e...
function i (line 4) | function i(){return f}
FILE: en/gitbook/theme.js
function o (line 1) | function o(a,s){if(!n[a]){if(!t[a]){var u="function"==typeof require&&re...
function n (line 1) | function n(e,t){t=t||te;var n=t.createElement("script");n.text=e,t.head....
function r (line 1) | function r(e){var t=!!e&&"length"in e&&e.length,n=de.type(e);return"func...
function o (line 1) | function o(e,t,n){return de.isFunction(t)?de.grep(e,function(e,r){return...
function i (line 1) | function i(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}
function a (line 1) | function a(e){var t={};return de.each(e.match(qe)||[],function(e,n){t[n]...
function s (line 1) | function s(e){return e}
function u (line 1) | function u(e){throw e}
function l (line 1) | function l(e,t,n){var r;try{e&&de.isFunction(r=e.promise)?r.call(e).done...
function c (line 1) | function c(){te.removeEventListener("DOMContentLoaded",c),e.removeEventL...
function f (line 1) | function f(){this.expando=de.expando+f.uid++}
function p (line 1) | function p(e){return"true"===e||"false"!==e&&("null"===e?null:e===+e+""?...
function h (line 1) | function h(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.rep...
function d (line 1) | function d(e,t,n,r){var o,i=1,a=20,s=r?function(){return r.cur()}:functi...
function g (line 1) | function g(e){var t,n=e.ownerDocument,r=e.nodeName,o=Ue[r];return o?o:(t...
function m (line 1) | function m(e,t){for(var n,r,o=[],i=0,a=e.length;i<a;i++)r=e[i],r.style&&...
function v (line 1) | function v(e,t){var n;return n="undefined"!=typeof e.getElementsByTagNam...
function y (line 1) | function y(e,t){for(var n=0,r=e.length;n<r;n++)Fe.set(e[n],"globalEval",...
function b (line 1) | function b(e,t,n,r,o){for(var i,a,s,u,l,c,f=t.createDocumentFragment(),p...
function x (line 1) | function x(){return!0}
function w (line 1) | function w(){return!1}
function C (line 1) | function C(){try{return te.activeElement}catch(e){}}
function T (line 1) | function T(e,t,n,r,o,i){var a,s;if("object"==typeof t){"string"!=typeof ...
function k (line 1) | function k(e,t){return de.nodeName(e,"table")&&de.nodeName(11!==t.nodeTy...
function j (line 1) | function j(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}
function E (line 1) | function E(e){var t=rt.exec(e.type);return t?e.type=t[1]:e.removeAttribu...
function N (line 1) | function N(e,t){var n,r,o,i,a,s,u,l;if(1===t.nodeType){if(Fe.hasData(e)&...
function S (line 1) | function S(e,t){var n=t.nodeName.toLowerCase();"input"===n&&ze.test(e.ty...
function A (line 1) | function A(e,t,r,o){t=oe.apply([],t);var i,a,s,u,l,c,f=0,p=e.length,h=p-...
function q (line 1) | function q(e,t,n){for(var r,o=t?de.filter(t,e):e,i=0;null!=(r=o[i]);i++)...
function D (line 1) | function D(e,t,n){var r,o,i,a,s=e.style;return n=n||st(e),n&&(a=n.getPro...
function O (line 1) | function O(e,t){return{get:function(){return e()?void delete this.get:(t...
function L (line 1) | function L(e){if(e in pt)return e;for(var t=e[0].toUpperCase()+e.slice(1...
function H (line 1) | function H(e,t,n){var r=$e.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3...
function F (line 1) | function F(e,t,n,r,o){var i,a=0;for(i=n===(r?"border":"content")?4:"widt...
function P (line 1) | function P(e,t,n){var r,o=!0,i=st(e),a="border-box"===de.css(e,"boxSizin...
function I (line 1) | function I(e,t,n,r,o){return new I.prototype.init(e,t,n,r,o)}
function R (line 1) | function R(){dt&&(e.requestAnimationFrame(R),de.fx.tick())}
function M (line 1) | function M(){return e.setTimeout(function(){ht=void 0}),ht=de.now()}
function $ (line 1) | function $(e,t){var n,r=0,o={height:e};for(t=t?1:0;r<4;r+=2-t)n=_e[r],o[...
function _ (line 1) | function _(e,t,n){for(var r,o=(U.tweeners[t]||[]).concat(U.tweeners["*"]...
function W (line 1) | function W(e,t,n){var r,o,i,a,s,u,l,c,f="width"in t||"height"in t,p=this...
function B (line 1) | function B(e,t){var n,r,o,i,a;for(n in e)if(r=de.camelCase(n),o=t[r],i=e...
function U (line 1) | function U(e,t,n){var r,o,i=0,a=U.prefilters.length,s=de.Deferred().alwa...
function z (line 1) | function z(e){var t=e.match(qe)||[];return t.join(" ")}
function X (line 1) | function X(e){return e.getAttribute&&e.getAttribute("class")||""}
function K (line 1) | function K(e,t,n,r){var o;if(de.isArray(t))de.each(t,function(t,o){n||Et...
function V (line 1) | function V(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r...
function G (line 1) | function G(e,t,n,r){function o(s){var u;return i[s]=!0,de.each(e[s]||[],...
function Y (line 1) | function Y(e,t){var n,r,o=de.ajaxSettings.flatOptions||{};for(n in t)voi...
function Q (line 1) | function Q(e,t,n){for(var r,o,i,a,s=e.contents,u=e.dataTypes;"*"===u[0];...
function J (line 1) | function J(e,t,n,r){var o,i,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for...
function Z (line 1) | function Z(e){return de.isWindow(e)?e:9===e.nodeType&&e.defaultView}
function t (line 1) | function t(e,t,n,r){var o,i,a,s,u,l,c,p=t&&t.ownerDocument,d=t?t.nodeTyp...
function n (line 1) | function n(){function e(n,r){return t.push(n+" ")>T.cacheLength&&delete ...
function r (line 1) | function r(e){return e[$]=!0,e}
function o (line 1) | function o(e){var t=L.createElement("fieldset");try{return!!e(t)}catch(e...
function i (line 1) | function i(e,t){for(var n=e.split("|"),r=n.length;r--;)T.attrHandle[n[r]...
function a (line 1) | function a(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.source...
function s (line 1) | function s(e){return function(t){var n=t.nodeName.toLowerCase();return"i...
function u (line 1) | function u(e){return function(t){var n=t.nodeName.toLowerCase();return("...
function l (line 1) | function l(e){return function(t){return"form"in t?t.parentNode&&t.disabl...
function c (line 1) | function c(e){return r(function(t){return t=+t,r(function(n,r){for(var o...
function f (line 1) | function f(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}
function p (line 1) | function p(){}
function h (line 1) | function h(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}
function d (line 1) | function d(e,t,n){var r=t.dir,o=t.next,i=o||r,a=n&&"parentNode"===i,s=B+...
function g (line 1) | function g(e){return e.length>1?function(t,n,r){for(var o=e.length;o--;)...
function m (line 1) | function m(e,n,r){for(var o=0,i=n.length;o<i;o++)t(e,n[o],r);return r}
function v (line 1) | function v(e,t,n,r,o){for(var i,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(i...
function y (line 1) | function y(e,t,n,o,i,a){return o&&!o[$]&&(o=y(o)),i&&!i[$]&&(i=y(i,a)),r...
function b (line 1) | function b(e){for(var t,n,r,o=e.length,i=T.relative[e[0].type],a=i||T.re...
function x (line 1) | function x(e,n){var o=n.length>0,i=e.length>0,a=function(r,a,s,u,l){var ...
function i (line 2) | function i(t,n,r,o){return function(){var l=this,c=arguments,f=function(...
function t (line 2) | function t(){if(s){s.style.cssText="box-sizing:border-box;position:relat...
function r (line 3) | function r(t,n,r,s){var l,p,h,x,w,C=n;c||(c=!0,u&&e.clearTimeout(u),o=vo...
function o (line 3) | function o(e,t,n){return e.addEventListener?void e.addEventListener(t,n,...
function i (line 3) | function i(e){if("keypress"==e.type){var t=String.fromCharCode(e.which);...
function a (line 3) | function a(e,t){return e.sort().join(",")===t.sort().join(",")}
function s (line 3) | function s(e){var t=[];return e.shiftKey&&t.push("shift"),e.altKey&&t.pu...
function u (line 3) | function u(e){return e.preventDefault?void e.preventDefault():void(e.ret...
function l (line 3) | function l(e){return e.stopPropagation?void e.stopPropagation():void(e.c...
function c (line 3) | function c(e){return"shift"==e||"ctrl"==e||"alt"==e||"meta"==e}
function f (line 3) | function f(){if(!v){v={};for(var e in y)e>95&&e<112||y.hasOwnProperty(e)...
function p (line 3) | function p(e,t,n){return n||(n=f()[e]?"keydown":"keypress"),"keypress"==...
function h (line 3) | function h(e){return"+"===e?["+"]:(e=e.replace(/\+{2}/g,"+plus"),e.split...
function d (line 3) | function d(e,t){var n,r,o,i=[];for(n=h(e),o=0;o<n.length;++o)r=n[o],w[r]...
function g (line 3) | function g(e,t){return null!==e&&e!==n&&(e===t||g(e.parentNode,t))}
function m (line 3) | function m(e){function t(e){e=e||{};var t,n=!1;for(t in x)e[t]?n=!0:x[t]...
function o (line 3) | function o(e){throw new RangeError(L[e])}
function i (line 3) | function i(e,t){for(var n=e.length,r=[];n--;)r[n]=t(e[n]);return r}
function a (line 3) | function a(e,t){var n=e.split("@"),r="";n.length>1&&(r=n[0]+"@",e=n[1]),...
function s (line 3) | function s(e){for(var t,n,r=[],o=0,i=e.length;o<i;)t=e.charCodeAt(o++),t...
function u (line 3) | function u(e){return i(e,function(e){var t="";return e>65535&&(e-=65536,...
function l (line 3) | function l(e){return e-48<10?e-22:e-65<26?e-65:e-97<26?e-97:C}
function c (line 3) | function c(e,t){return e+22+75*(e<26)-((0!=t)<<5)}
function f (line 3) | function f(e,t,n){var r=0;for(e=n?F(e/E):e>>1,e+=F(e/t);e>H*k>>1;r+=C)e=...
function p (line 3) | function p(e){var t,n,r,i,a,s,c,p,h,d,g=[],m=e.length,v=0,y=S,b=N;for(n=...
function h (line 3) | function h(e){var t,n,r,i,a,u,l,p,h,d,g,m,v,y,b,x=[];for(e=s(e),m=e.leng...
function d (line 3) | function d(e){return a(e,function(e){return q.test(e)?p(e.slice(4).toLow...
function g (line 3) | function g(e){return a(e,function(e){return D.test(e)?"xn--"+h(e):e})}
function r (line 3) | function r(e,t){return Object.prototype.hasOwnProperty.call(e,t)}
function r (line 4) | function r(e,t){if(e.map)return e.map(t);for(var n=[],r=0;r<e.length;r++...
function r (line 4) | function r(){this.protocol=null,this.slashes=null,this.auth=null,this.ho...
function o (line 4) | function o(e,t,n){if(e&&l.isObject(e)&&e instanceof r)return e;var o=new...
function i (line 4) | function i(e){return l.isString(e)&&(e=o(e)),e instanceof r?e.format():r...
function a (line 4) | function a(e,t){return o(e,!1,!0).resolve(t)}
function s (line 4) | function s(e,t){return e?o(e,!1,!0).resolveObject(t):t}
function r (line 4) | function r(e){var t=a(e.currentTarget).parent().find(".dropdown-menu");t...
function o (line 4) | function o(e){a(".dropdown-menu").removeClass("open")}
function i (line 4) | function i(){a(document).on("click",".toggle-dropdown",r),a(document).on...
function r (line 4) | function r(){s.init(),i.init(),o.init(),a.init(),u.createButton({index:0...
function r (line 4) | function r(e,t){i.bind(e,function(e){return t(),!1})}
function o (line 4) | function o(){r(["right"],function(e){a.goNext()}),r(["left"],function(e)...
function r (line 4) | function r(e){return o.state.$book.addClass("is-loading"),e.always(funct...
function r (line 4) | function r(){return T(E.isSmallScreen()?".book-body":".body-inner")}
function o (line 4) | function o(e){var t=r(),n=0;i(e)&&(e&&(n=u(e)),t.unbind("scroll"),t.anim...
function i (line 4) | function i(e){var t=r(),n=t.find(e);return!!n.length}
function a (line 4) | function a(e){return 0===e.length}
function s (line 4) | function s(e,t){return e.length>0&&e.filter(t).length>0}
function u (line 4) | function u(e){var t=r(),n=t.find(".page-inner"),o=t.find(e),i=o.offsetPa...
function l (line 4) | function l(e,t){if(e||t||(e=w.first()),t&&(e=w.length>1?w.filter(functio...
function c (line 4) | function c(e){var t=e.children("a"),n=t.attr("href").split("#")[1];retur...
function f (line 4) | function f(){var e=r(),t=e.scrollTop(),n=e.prop("scrollHeight"),o=e.prop...
function p (line 4) | function p(e,t){var n=k.parse(A),r=k.resolve(window.location.pathname,e)...
function h (line 4) | function h(){var e,t;e=parseInt(T(".body-inner").css("width"),10),t=pars...
function d (line 4) | function d(e){var t=T(".book-body"),n=t.find(".body-inner"),o=n.find(".p...
function g (line 4) | function g(e){return 0===e.button}
function m (line 4) | function m(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}
function v (line 4) | function v(e){var t=T(this),n=t.attr("target");if(!m(e)&&g(e)&&!n){e.sto...
function y (line 4) | function y(){var e=T(".navigation-next").attr("href");e&&p(e,!0)}
function b (line 4) | function b(){var e=T(".navigation-prev").attr("href");e&&p(e,!0)}
function x (line 4) | function x(){T.ajaxSetup({cache:!1}),history.replaceState({path:window.l...
function r (line 4) | function r(e,t){null!=l.state&&o()==e||(null==t&&(t=!0),l.state.$book.to...
function o (line 4) | function o(){return l.state.$book.hasClass("with-summary")}
function i (line 4) | function i(){u.isMobile()||r(l.storage.get("sidebar",!0),!1),s(document)...
function a (line 4) | function a(e){var t=s(".book-summary");t.find("li").each(function(){var ...
function r (line 4) | function r(){return"btn-"+g++}
function o (line 4) | function o(e,t,n,r){var o=e.children(t).length;n<0&&(n=Math.max(0,o+1+n)...
function i (line 4) | function i(e){e.preventDefault()}
function a (line 4) | function a(e){var t=p("<div>",{class:"dropdown-menu",html:'<div class="d...
function s (line 4) | function s(e){return e=p.extend({label:"",icon:"",text:"",position:"left...
function u (line 4) | function u(e){var t,n=p(".book-header"),r=n.find("h1"),i="pull-"+e.posit...
function l (line 4) | function l(){p(".js-toolbar-action").remove(),d.forEach(u)}
function c (line 4) | function c(e){d=p.grep(d,function(t){return t.id!=e}),l()}
function f (line 4) | function f(e){d=p.grep(d,function(t){return e.indexOf(t.id)==-1}),l()}
FILE: fa/gitbook/gitbook.js
function o (line 1) | function o(s,a){if(!n[s]){if(!t[s]){var u="function"==typeof require&&re...
function n (line 1) | function n(e,t){t=t||te;var n=t.createElement("script");n.text=e,t.head....
function r (line 1) | function r(e){var t=!!e&&"length"in e&&e.length,n=de.type(e);return"func...
function o (line 1) | function o(e,t,n){return de.isFunction(t)?de.grep(e,function(e,r){return...
function i (line 1) | function i(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}
function s (line 1) | function s(e){var t={};return de.each(e.match(qe)||[],function(e,n){t[n]...
function a (line 1) | function a(e){return e}
function u (line 1) | function u(e){throw e}
function c (line 1) | function c(e,t,n){var r;try{e&&de.isFunction(r=e.promise)?r.call(e).done...
function l (line 1) | function l(){te.removeEventListener("DOMContentLoaded",l),e.removeEventL...
function f (line 1) | function f(){this.expando=de.expando+f.uid++}
function p (line 1) | function p(e){return"true"===e||"false"!==e&&("null"===e?null:e===+e+""?...
function h (line 1) | function h(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.rep...
function d (line 1) | function d(e,t,n,r){var o,i=1,s=20,a=r?function(){return r.cur()}:functi...
function g (line 1) | function g(e){var t,n=e.ownerDocument,r=e.nodeName,o=Ue[r];return o?o:(t...
function m (line 1) | function m(e,t){for(var n,r,o=[],i=0,s=e.length;i<s;i++)r=e[i],r.style&&...
function v (line 1) | function v(e,t){var n;return n="undefined"!=typeof e.getElementsByTagNam...
function y (line 1) | function y(e,t){for(var n=0,r=e.length;n<r;n++)Fe.set(e[n],"globalEval",...
function x (line 1) | function x(e,t,n,r,o){for(var i,s,a,u,c,l,f=t.createDocumentFragment(),p...
function b (line 1) | function b(){return!0}
function w (line 1) | function w(){return!1}
function T (line 1) | function T(){try{return te.activeElement}catch(e){}}
function C (line 1) | function C(e,t,n,r,o,i){var s,a;if("object"==typeof t){"string"!=typeof ...
function j (line 1) | function j(e,t){return de.nodeName(e,"table")&&de.nodeName(11!==t.nodeTy...
function k (line 1) | function k(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}
function E (line 1) | function E(e){var t=rt.exec(e.type);return t?e.type=t[1]:e.removeAttribu...
function S (line 1) | function S(e,t){var n,r,o,i,s,a,u,c;if(1===t.nodeType){if(Fe.hasData(e)&...
function N (line 1) | function N(e,t){var n=t.nodeName.toLowerCase();"input"===n&&ze.test(e.ty...
function A (line 1) | function A(e,t,r,o){t=oe.apply([],t);var i,s,a,u,c,l,f=0,p=e.length,h=p-...
function q (line 1) | function q(e,t,n){for(var r,o=t?de.filter(t,e):e,i=0;null!=(r=o[i]);i++)...
function D (line 1) | function D(e,t,n){var r,o,i,s,a=e.style;return n=n||at(e),n&&(s=n.getPro...
function O (line 1) | function O(e,t){return{get:function(){return e()?void delete this.get:(t...
function L (line 1) | function L(e){if(e in pt)return e;for(var t=e[0].toUpperCase()+e.slice(1...
function H (line 1) | function H(e,t,n){var r=$e.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3...
function F (line 1) | function F(e,t,n,r,o){var i,s=0;for(i=n===(r?"border":"content")?4:"widt...
function R (line 1) | function R(e,t,n){var r,o=!0,i=at(e),s="border-box"===de.css(e,"boxSizin...
function I (line 1) | function I(e,t,n,r,o){return new I.prototype.init(e,t,n,r,o)}
function P (line 1) | function P(){dt&&(e.requestAnimationFrame(P),de.fx.tick())}
function M (line 1) | function M(){return e.setTimeout(function(){ht=void 0}),ht=de.now()}
function $ (line 1) | function $(e,t){var n,r=0,o={height:e};for(t=t?1:0;r<4;r+=2-t)n=We[r],o[...
function W (line 1) | function W(e,t,n){for(var r,o=(U.tweeners[t]||[]).concat(U.tweeners["*"]...
function B (line 1) | function B(e,t,n){var r,o,i,s,a,u,c,l,f="width"in t||"height"in t,p=this...
function _ (line 1) | function _(e,t){var n,r,o,i,s;for(n in e)if(r=de.camelCase(n),o=t[r],i=e...
function U (line 1) | function U(e,t,n){var r,o,i=0,s=U.prefilters.length,a=de.Deferred().alwa...
function z (line 1) | function z(e){var t=e.match(qe)||[];return t.join(" ")}
function X (line 1) | function X(e){return e.getAttribute&&e.getAttribute("class")||""}
function V (line 1) | function V(e,t,n,r){var o;if(de.isArray(t))de.each(t,function(t,o){n||Et...
function G (line 1) | function G(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r...
function Y (line 1) | function Y(e,t,n,r){function o(a){var u;return i[a]=!0,de.each(e[a]||[],...
function Q (line 1) | function Q(e,t){var n,r,o=de.ajaxSettings.flatOptions||{};for(n in t)voi...
function J (line 1) | function J(e,t,n){for(var r,o,i,s,a=e.contents,u=e.dataTypes;"*"===u[0];...
function K (line 1) | function K(e,t,n,r){var o,i,s,a,u,c={},l=e.dataTypes.slice();if(l[1])for...
function Z (line 1) | function Z(e){return de.isWindow(e)?e:9===e.nodeType&&e.defaultView}
function t (line 1) | function t(e,t,n,r){var o,i,s,a,u,c,l,p=t&&t.ownerDocument,d=t?t.nodeTyp...
function n (line 1) | function n(){function e(n,r){return t.push(n+" ")>C.cacheLength&&delete ...
function r (line 1) | function r(e){return e[$]=!0,e}
function o (line 1) | function o(e){var t=L.createElement("fieldset");try{return!!e(t)}catch(e...
function i (line 1) | function i(e,t){for(var n=e.split("|"),r=n.length;r--;)C.attrHandle[n[r]...
function s (line 1) | function s(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.source...
function a (line 1) | function a(e){return function(t){var n=t.nodeName.toLowerCase();return"i...
function u (line 1) | function u(e){return function(t){var n=t.nodeName.toLowerCase();return("...
function c (line 1) | function c(e){return function(t){return"form"in t?t.parentNode&&t.disabl...
function l (line 1) | function l(e){return r(function(t){return t=+t,r(function(n,r){for(var o...
function f (line 1) | function f(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}
function p (line 1) | function p(){}
function h (line 1) | function h(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}
function d (line 1) | function d(e,t,n){var r=t.dir,o=t.next,i=o||r,s=n&&"parentNode"===i,a=_+...
function g (line 1) | function g(e){return e.length>1?function(t,n,r){for(var o=e.length;o--;)...
function m (line 1) | function m(e,n,r){for(var o=0,i=n.length;o<i;o++)t(e,n[o],r);return r}
function v (line 1) | function v(e,t,n,r,o){for(var i,s=[],a=0,u=e.length,c=null!=t;a<u;a++)(i...
function y (line 1) | function y(e,t,n,o,i,s){return o&&!o[$]&&(o=y(o)),i&&!i[$]&&(i=y(i,s)),r...
function x (line 1) | function x(e){for(var t,n,r,o=e.length,i=C.relative[e[0].type],s=i||C.re...
function b (line 1) | function b(e,n){var o=n.length>0,i=e.length>0,s=function(r,s,a,u,c){var ...
function i (line 2) | function i(t,n,r,o){return function(){var c=this,l=arguments,f=function(...
function t (line 2) | function t(){if(a){a.style.cssText="box-sizing:border-box;position:relat...
function r (line 3) | function r(t,n,r,a){var c,p,h,b,w,T=n;l||(l=!0,u&&e.clearTimeout(u),o=vo...
function t (line 3) | function t(e,t){for(var n=0,r=e.length-1;r>=0;r--){var o=e[r];"."===o?e....
function r (line 3) | function r(e,t){if(e.filter)return e.filter(t);for(var n=[],r=0;r<e.leng...
function r (line 3) | function r(e){for(var t=0;t<e.length&&""===e[t];t++);for(var n=e.length-...
function r (line 3) | function r(){throw new Error("setTimeout has not been defined")}
function o (line 3) | function o(){throw new Error("clearTimeout has not been defined")}
function i (line 3) | function i(e){if(f===setTimeout)return setTimeout(e,0);if((f===r||!f)&&s...
function s (line 3) | function s(e){if(p===clearTimeout)return clearTimeout(e);if((p===o||!p)&...
function a (line 3) | function a(){m&&d&&(m=!1,d.length?g=d.concat(g):v=-1,g.length&&u())}
function u (line 3) | function u(){if(!m){var e=i(a);m=!0;for(var t=g.length;t;){for(d=g,g=[];...
function c (line 3) | function c(e,t){this.fun=e,this.array=t}
function l (line 3) | function l(){}
function o (line 3) | function o(e){throw new RangeError(L[e])}
function i (line 3) | function i(e,t){for(var n=e.length,r=[];n--;)r[n]=t(e[n]);return r}
function s (line 3) | function s(e,t){var n=e.split("@"),r="";n.length>1&&(r=n[0]+"@",e=n[1]),...
function a (line 3) | function a(e){for(var t,n,r=[],o=0,i=e.length;o<i;)t=e.charCodeAt(o++),t...
function u (line 3) | function u(e){return i(e,function(e){var t="";return e>65535&&(e-=65536,...
function c (line 3) | function c(e){return e-48<10?e-22:e-65<26?e-65:e-97<26?e-97:T}
function l (line 3) | function l(e,t){return e+22+75*(e<26)-((0!=t)<<5)}
function f (line 3) | function f(e,t,n){var r=0;for(e=n?F(e/E):e>>1,e+=F(e/t);e>H*j>>1;r+=T)e=...
function p (line 3) | function p(e){var t,n,r,i,s,a,l,p,h,d,g=[],m=e.length,v=0,y=N,x=S;for(n=...
function h (line 3) | function h(e){var t,n,r,i,s,u,c,p,h,d,g,m,v,y,x,b=[];for(e=a(e),m=e.leng...
function d (line 3) | function d(e){return s(e,function(e){return q.test(e)?p(e.slice(4).toLow...
function g (line 3) | function g(e){return s(e,function(e){return D.test(e)?"xn--"+h(e):e})}
function r (line 3) | function r(e,t){return Object.prototype.hasOwnProperty.call(e,t)}
function r (line 3) | function r(e,t){if(e.map)return e.map(t);for(var n=[],r=0;r<e.length;r++...
function r (line 3) | function r(){this.protocol=null,this.slashes=null,this.auth=null,this.ho...
function o (line 3) | function o(e,t,n){
function i (line 4) | function i(e){return c.isString(e)&&(e=o(e)),e instanceof r?e.format():r...
function s (line 4) | function s(e,t){return o(e,!1,!0).resolve(t)}
function a (line 4) | function a(e,t){return e?o(e,!1,!0).resolveObject(t):t}
function r (line 4) | function r(e){console.log("page has changed",e),o(e),l||(l=!0,c.trigger(...
function o (line 4) | function o(e){f.page=e.page,f.file=e.file,f.gitbook=e.gitbook,f.config=e...
function i (line 4) | function i(){return f}
FILE: fa/gitbook/theme.js
function o (line 1) | function o(a,s){if(!n[a]){if(!t[a]){var u="function"==typeof require&&re...
function n (line 1) | function n(e,t){t=t||te;var n=t.createElement("script");n.text=e,t.head....
function r (line 1) | function r(e){var t=!!e&&"length"in e&&e.length,n=de.type(e);return"func...
function o (line 1) | function o(e,t,n){return de.isFunction(t)?de.grep(e,function(e,r){return...
function i (line 1) | function i(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}
function a (line 1) | function a(e){var t={};return de.each(e.match(qe)||[],function(e,n){t[n]...
function s (line 1) | function s(e){return e}
function u (line 1) | function u(e){throw e}
function l (line 1) | function l(e,t,n){var r;try{e&&de.isFunction(r=e.promise)?r.call(e).done...
function c (line 1) | function c(){te.removeEventListener("DOMContentLoaded",c),e.removeEventL...
function f (line 1) | function f(){this.expando=de.expando+f.uid++}
function p (line 1) | function p(e){return"true"===e||"false"!==e&&("null"===e?null:e===+e+""?...
function h (line 1) | function h(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.rep...
function d (line 1) | function d(e,t,n,r){var o,i=1,a=20,s=r?function(){return r.cur()}:functi...
function g (line 1) | function g(e){var t,n=e.ownerDocument,r=e.nodeName,o=Ue[r];return o?o:(t...
function m (line 1) | function m(e,t){for(var n,r,o=[],i=0,a=e.length;i<a;i++)r=e[i],r.style&&...
function v (line 1) | function v(e,t){var n;return n="undefined"!=typeof e.getElementsByTagNam...
function y (line 1) | function y(e,t){for(var n=0,r=e.length;n<r;n++)Fe.set(e[n],"globalEval",...
function b (line 1) | function b(e,t,n,r,o){for(var i,a,s,u,l,c,f=t.createDocumentFragment(),p...
function x (line 1) | function x(){return!0}
function w (line 1) | function w(){return!1}
function C (line 1) | function C(){try{return te.activeElement}catch(e){}}
function T (line 1) | function T(e,t,n,r,o,i){var a,s;if("object"==typeof t){"string"!=typeof ...
function k (line 1) | function k(e,t){return de.nodeName(e,"table")&&de.nodeName(11!==t.nodeTy...
function j (line 1) | function j(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}
function E (line 1) | function E(e){var t=rt.exec(e.type);return t?e.type=t[1]:e.removeAttribu...
function N (line 1) | function N(e,t){var n,r,o,i,a,s,u,l;if(1===t.nodeType){if(Fe.hasData(e)&...
function S (line 1) | function S(e,t){var n=t.nodeName.toLowerCase();"input"===n&&ze.test(e.ty...
function A (line 1) | function A(e,t,r,o){t=oe.apply([],t);var i,a,s,u,l,c,f=0,p=e.length,h=p-...
function q (line 1) | function q(e,t,n){for(var r,o=t?de.filter(t,e):e,i=0;null!=(r=o[i]);i++)...
function D (line 1) | function D(e,t,n){var r,o,i,a,s=e.style;return n=n||st(e),n&&(a=n.getPro...
function O (line 1) | function O(e,t){return{get:function(){return e()?void delete this.get:(t...
function L (line 1) | function L(e){if(e in pt)return e;for(var t=e[0].toUpperCase()+e.slice(1...
function H (line 1) | function H(e,t,n){var r=$e.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3...
function F (line 1) | function F(e,t,n,r,o){var i,a=0;for(i=n===(r?"border":"content")?4:"widt...
function P (line 1) | function P(e,t,n){var r,o=!0,i=st(e),a="border-box"===de.css(e,"boxSizin...
function I (line 1) | function I(e,t,n,r,o){return new I.prototype.init(e,t,n,r,o)}
function R (line 1) | function R(){dt&&(e.requestAnimationFrame(R),de.fx.tick())}
function M (line 1) | function M(){return e.setTimeout(function(){ht=void 0}),ht=de.now()}
function $ (line 1) | function $(e,t){var n,r=0,o={height:e};for(t=t?1:0;r<4;r+=2-t)n=_e[r],o[...
function _ (line 1) | function _(e,t,n){for(var r,o=(U.tweeners[t]||[]).concat(U.tweeners["*"]...
function W (line 1) | function W(e,t,n){var r,o,i,a,s,u,l,c,f="width"in t||"height"in t,p=this...
function B (line 1) | function B(e,t){var n,r,o,i,a;for(n in e)if(r=de.camelCase(n),o=t[r],i=e...
function U (line 1) | function U(e,t,n){var r,o,i=0,a=U.prefilters.length,s=de.Deferred().alwa...
function z (line 1) | function z(e){var t=e.match(qe)||[];return t.join(" ")}
function X (line 1) | function X(e){return e.getAttribute&&e.getAttribute("class")||""}
function K (line 1) | function K(e,t,n,r){var o;if(de.isArray(t))de.each(t,function(t,o){n||Et...
function V (line 1) | function V(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r...
function G (line 1) | function G(e,t,n,r){function o(s){var u;return i[s]=!0,de.each(e[s]||[],...
function Y (line 1) | function Y(e,t){var n,r,o=de.ajaxSettings.flatOptions||{};for(n in t)voi...
function Q (line 1) | function Q(e,t,n){for(var r,o,i,a,s=e.contents,u=e.dataTypes;"*"===u[0];...
function J (line 1) | function J(e,t,n,r){var o,i,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for...
function Z (line 1) | function Z(e){return de.isWindow(e)?e:9===e.nodeType&&e.defaultView}
function t (line 1) | function t(e,t,n,r){var o,i,a,s,u,l,c,p=t&&t.ownerDocument,d=t?t.nodeTyp...
function n (line 1) | function n(){function e(n,r){return t.push(n+" ")>T.cacheLength&&delete ...
function r (line 1) | function r(e){return e[$]=!0,e}
function o (line 1) | function o(e){var t=L.createElement("fieldset");try{return!!e(t)}catch(e...
function i (line 1) | function i(e,t){for(var n=e.split("|"),r=n.length;r--;)T.attrHandle[n[r]...
function a (line 1) | function a(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.source...
function s (line 1) | function s(e){return function(t){var n=t.nodeName.toLowerCase();return"i...
function u (line 1) | function u(e){return function(t){var n=t.nodeName.toLowerCase();return("...
function l (line 1) | function l(e){return function(t){return"form"in t?t.parentNode&&t.disabl...
function c (line 1) | function c(e){return r(function(t){return t=+t,r(function(n,r){for(var o...
function f (line 1) | function f(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}
function p (line 1) | function p(){}
function h (line 1) | function h(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}
function d (line 1) | function d(e,t,n){var r=t.dir,o=t.next,i=o||r,a=n&&"parentNode"===i,s=B+...
function g (line 1) | function g(e){return e.length>1?function(t,n,r){for(var o=e.length;o--;)...
function m (line 1) | function m(e,n,r){for(var o=0,i=n.length;o<i;o++)t(e,n[o],r);return r}
function v (line 1) | function v(e,t,n,r,o){for(var i,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(i...
function y (line 1) | function y(e,t,n,o,i,a){return o&&!o[$]&&(o=y(o)),i&&!i[$]&&(i=y(i,a)),r...
function b (line 1) | function b(e){for(var t,n,r,o=e.length,i=T.relative[e[0].type],a=i||T.re...
function x (line 1) | function x(e,n){var o=n.length>0,i=e.length>0,a=function(r,a,s,u,l){var ...
function i (line 2) | function i(t,n,r,o){return function(){var l=this,c=arguments,f=function(...
function t (line 2) | function t(){if(s){s.style.cssText="box-sizing:border-box;position:relat...
function r (line 3) | function r(t,n,r,s){var l,p,h,x,w,C=n;c||(c=!0,u&&e.clearTimeout(u),o=vo...
function o (line 3) | function o(e,t,n){return e.addEventListener?void e.addEventListener(t,n,...
function i (line 3) | function i(e){if("keypress"==e.type){var t=String.fromCharCode(e.which);...
function a (line 3) | function a(e,t){return e.sort().join(",")===t.sort().join(",")}
function s (line 3) | function s(e){var t=[];return e.shiftKey&&t.push("shift"),e.altKey&&t.pu...
function u (line 3) | function u(e){return e.preventDefault?void e.preventDefault():void(e.ret...
function l (line 3) | function l(e){return e.stopPropagation?void e.stopPropagation():void(e.c...
function c (line 3) | function c(e){return"shift"==e||"ctrl"==e||"alt"==e||"meta"==e}
function f (line 3) | function f(){if(!v){v={};for(var e in y)e>95&&e<112||y.hasOwnProperty(e)...
function p (line 3) | function p(e,t,n){return n||(n=f()[e]?"keydown":"keypress"),"keypress"==...
function h (line 3) | function h(e){return"+"===e?["+"]:(e=e.replace(/\+{2}/g,"+plus"),e.split...
function d (line 3) | function d(e,t){var n,r,o,i=[];for(n=h(e),o=0;o<n.length;++o)r=n[o],w[r]...
function g (line 3) | function g(e,t){return null!==e&&e!==n&&(e===t||g(e.parentNode,t))}
function m (line 3) | function m(e){function t(e){e=e||{};var t,n=!1;for(t in x)e[t]?n=!0:x[t]...
function o (line 3) | function o(e){throw new RangeError(L[e])}
function i (line 3) | function i(e,t){for(var n=e.length,r=[];n--;)r[n]=t(e[n]);return r}
function a (line 3) | function a(e,t){var n=e.split("@"),r="";n.length>1&&(r=n[0]+"@",e=n[1]),...
function s (line 3) | function s(e){for(var t,n,r=[],o=0,i=e.length;o<i;)t=e.charCodeAt(o++),t...
function u (line 3) | function u(e){return i(e,function(e){var t="";return e>65535&&(e-=65536,...
function l (line 3) | function l(e){return e-48<10?e-22:e-65<26?e-65:e-97<26?e-97:C}
function c (line 3) | function c(e,t){return e+22+75*(e<26)-((0!=t)<<5)}
function f (line 3) | function f(e,t,n){var r=0;for(e=n?F(e/E):e>>1,e+=F(e/t);e>H*k>>1;r+=C)e=...
function p (line 3) | function p(e){var t,n,r,i,a,s,c,p,h,d,g=[],m=e.length,v=0,y=S,b=N;for(n=...
function h (line 3) | function h(e){var t,n,r,i,a,u,l,p,h,d,g,m,v,y,b,x=[];for(e=s(e),m=e.leng...
function d (line 3) | function d(e){return a(e,function(e){return q.test(e)?p(e.slice(4).toLow...
function g (line 3) | function g(e){return a(e,function(e){return D.test(e)?"xn--"+h(e):e})}
function r (line 3) | function r(e,t){return Object.prototype.hasOwnProperty.call(e,t)}
function r (line 4) | function r(e,t){if(e.map)return e.map(t);for(var n=[],r=0;r<e.length;r++...
function r (line 4) | function r(){this.protocol=null,this.slashes=null,this.auth=null,this.ho...
function o (line 4) | function o(e,t,n){if(e&&l.isObject(e)&&e instanceof r)return e;var o=new...
function i (line 4) | function i(e){return l.isString(e)&&(e=o(e)),e instanceof r?e.format():r...
function a (line 4) | function a(e,t){return o(e,!1,!0).resolve(t)}
function s (line 4) | function s(e,t){return e?o(e,!1,!0).resolveObject(t):t}
function r (line 4) | function r(e){var t=a(e.currentTarget).parent().find(".dropdown-menu");t...
function o (line 4) | function o(e){a(".dropdown-menu").removeClass("open")}
function i (line 4) | function i(){a(document).on("click",".toggle-dropdown",r),a(document).on...
function r (line 4) | function r(){s.init(),i.init(),o.init(),a.init(),u.createButton({index:0...
function r (line 4) | function r(e,t){i.bind(e,function(e){return t(),!1})}
function o (line 4) | function o(){r(["right"],function(e){a.goNext()}),r(["left"],function(e)...
function r (line 4) | function r(e){return o.state.$book.addClass("is-loading"),e.always(funct...
function r (line 4) | function r(){return T(E.isSmallScreen()?".book-body":".body-inner")}
function o (line 4) | function o(e){var t=r(),n=0;i(e)&&(e&&(n=u(e)),t.unbind("scroll"),t.anim...
function i (line 4) | function i(e){var t=r(),n=t.find(e);return!!n.length}
function a (line 4) | function a(e){return 0===e.length}
function s (line 4) | function s(e,t){return e.length>0&&e.filter(t).length>0}
function u (line 4) | function u(e){var t=r(),n=t.find(".page-inner"),o=t.find(e),i=o.offsetPa...
function l (line 4) | function l(e,t){if(e||t||(e=w.first()),t&&(e=w.length>1?w.filter(functio...
function c (line 4) | function c(e){var t=e.children("a"),n=t.attr("href").split("#")[1];retur...
function f (line 4) | function f(){var e=r(),t=e.scrollTop(),n=e.prop("scrollHeight"),o=e.prop...
function p (line 4) | function p(e,t){var n=k.parse(A),r=k.resolve(window.location.pathname,e)...
function h (line 4) | function h(){var e,t;e=parseInt(T(".body-inner").css("width"),10),t=pars...
function d (line 4) | function d(e){var t=T(".book-body"),n=t.find(".body-inner"),o=n.find(".p...
function g (line 4) | function g(e){return 0===e.button}
function m (line 4) | function m(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}
function v (line 4) | function v(e){var t=T(this),n=t.attr("target");if(!m(e)&&g(e)&&!n){e.sto...
function y (line 4) | function y(){var e=T(".navigation-next").attr("href");e&&p(e,!0)}
function b (line 4) | function b(){var e=T(".navigation-prev").attr("href");e&&p(e,!0)}
function x (line 4) | function x(){T.ajaxSetup({cache:!1}),history.replaceState({path:window.l...
function r (line 4) | function r(e,t){null!=l.state&&o()==e||(null==t&&(t=!0),l.state.$book.to...
function o (line 4) | function o(){return l.state.$book.hasClass("with-summary")}
function i (line 4) | function i(){u.isMobile()||r(l.storage.get("sidebar",!0),!1),s(document)...
function a (line 4) | function a(e){var t=s(".book-summary");t.find("li").each(function(){var ...
function r (line 4) | function r(){return"btn-"+g++}
function o (line 4) | function o(e,t,n,r){var o=e.children(t).length;n<0&&(n=Math.max(0,o+1+n)...
function i (line 4) | function i(e){e.preventDefault()}
function a (line 4) | function a(e){var t=p("<div>",{class:"dropdown-menu",html:'<div class="d...
function s (line 4) | function s(e){return e=p.extend({label:"",icon:"",text:"",position:"left...
function u (line 4) | function u(e){var t,n=p(".book-header"),r=n.find("h1"),i="pull-"+e.posit...
function l (line 4) | function l(){p(".js-toolbar-action").remove(),d.forEach(u)}
function c (line 4) | function c(e){d=p.grep(d,function(t){return t.id!=e}),l()}
function f (line 4) | function f(e){d=p.grep(d,function(t){return e.indexOf(t.id)==-1}),l()}
FILE: gitbook/gitbook.js
function o (line 1) | function o(s,a){if(!n[s]){if(!t[s]){var u="function"==typeof require&&re...
function n (line 1) | function n(e,t){t=t||te;var n=t.createElement("script");n.text=e,t.head....
function r (line 1) | function r(e){var t=!!e&&"length"in e&&e.length,n=de.type(e);return"func...
function o (line 1) | function o(e,t,n){return de.isFunction(t)?de.grep(e,function(e,r){return...
function i (line 1) | function i(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}
function s (line 1) | function s(e){var t={};return de.each(e.match(qe)||[],function(e,n){t[n]...
function a (line 1) | function a(e){return e}
function u (line 1) | function u(e){throw e}
function c (line 1) | function c(e,t,n){var r;try{e&&de.isFunction(r=e.promise)?r.call(e).done...
function l (line 1) | function l(){te.removeEventListener("DOMContentLoaded",l),e.removeEventL...
function f (line 1) | function f(){this.expando=de.expando+f.uid++}
function p (line 1) | function p(e){return"true"===e||"false"!==e&&("null"===e?null:e===+e+""?...
function h (line 1) | function h(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.rep...
function d (line 1) | function d(e,t,n,r){var o,i=1,s=20,a=r?function(){return r.cur()}:functi...
function g (line 1) | function g(e){var t,n=e.ownerDocument,r=e.nodeName,o=Ue[r];return o?o:(t...
function m (line 1) | function m(e,t){for(var n,r,o=[],i=0,s=e.length;i<s;i++)r=e[i],r.style&&...
function v (line 1) | function v(e,t){var n;return n="undefined"!=typeof e.getElementsByTagNam...
function y (line 1) | function y(e,t){for(var n=0,r=e.length;n<r;n++)Fe.set(e[n],"globalEval",...
function x (line 1) | function x(e,t,n,r,o){for(var i,s,a,u,c,l,f=t.createDocumentFragment(),p...
function b (line 1) | function b(){return!0}
function w (line 1) | function w(){return!1}
function T (line 1) | function T(){try{return te.activeElement}catch(e){}}
function C (line 1) | function C(e,t,n,r,o,i){var s,a;if("object"==typeof t){"string"!=typeof ...
function j (line 1) | function j(e,t){return de.nodeName(e,"table")&&de.nodeName(11!==t.nodeTy...
function k (line 1) | function k(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}
function E (line 1) | function E(e){var t=rt.exec(e.type);return t?e.type=t[1]:e.removeAttribu...
function S (line 1) | function S(e,t){var n,r,o,i,s,a,u,c;if(1===t.nodeType){if(Fe.hasData(e)&...
function N (line 1) | function N(e,t){var n=t.nodeName.toLowerCase();"input"===n&&ze.test(e.ty...
function A (line 1) | function A(e,t,r,o){t=oe.apply([],t);var i,s,a,u,c,l,f=0,p=e.length,h=p-...
function q (line 1) | function q(e,t,n){for(var r,o=t?de.filter(t,e):e,i=0;null!=(r=o[i]);i++)...
function D (line 1) | function D(e,t,n){var r,o,i,s,a=e.style;return n=n||at(e),n&&(s=n.getPro...
function O (line 1) | function O(e,t){return{get:function(){return e()?void delete this.get:(t...
function L (line 1) | function L(e){if(e in pt)return e;for(var t=e[0].toUpperCase()+e.slice(1...
function H (line 1) | function H(e,t,n){var r=$e.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3...
function F (line 1) | function F(e,t,n,r,o){var i,s=0;for(i=n===(r?"border":"content")?4:"widt...
function R (line 1) | function R(e,t,n){var r,o=!0,i=at(e),s="border-box"===de.css(e,"boxSizin...
function I (line 1) | function I(e,t,n,r,o){return new I.prototype.init(e,t,n,r,o)}
function P (line 1) | function P(){dt&&(e.requestAnimationFrame(P),de.fx.tick())}
function M (line 1) | function M(){return e.setTimeout(function(){ht=void 0}),ht=de.now()}
function $ (line 1) | function $(e,t){var n,r=0,o={height:e};for(t=t?1:0;r<4;r+=2-t)n=We[r],o[...
function W (line 1) | function W(e,t,n){for(var r,o=(U.tweeners[t]||[]).concat(U.tweeners["*"]...
function B (line 1) | function B(e,t,n){var r,o,i,s,a,u,c,l,f="width"in t||"height"in t,p=this...
function _ (line 1) | function _(e,t){var n,r,o,i,s;for(n in e)if(r=de.camelCase(n),o=t[r],i=e...
function U (line 1) | function U(e,t,n){var r,o,i=0,s=U.prefilters.length,a=de.Deferred().alwa...
function z (line 1) | function z(e){var t=e.match(qe)||[];return t.join(" ")}
function X (line 1) | function X(e){return e.getAttribute&&e.getAttribute("class")||""}
function V (line 1) | function V(e,t,n,r){var o;if(de.isArray(t))de.each(t,function(t,o){n||Et...
function G (line 1) | function G(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r...
function Y (line 1) | function Y(e,t,n,r){function o(a){var u;return i[a]=!0,de.each(e[a]||[],...
function Q (line 1) | function Q(e,t){var n,r,o=de.ajaxSettings.flatOptions||{};for(n in t)voi...
function J (line 1) | function J(e,t,n){for(var r,o,i,s,a=e.contents,u=e.dataTypes;"*"===u[0];...
function K (line 1) | function K(e,t,n,r){var o,i,s,a,u,c={},l=e.dataTypes.slice();if(l[1])for...
function Z (line 1) | function Z(e){return de.isWindow(e)?e:9===e.nodeType&&e.defaultView}
function t (line 1) | function t(e,t,n,r){var o,i,s,a,u,c,l,p=t&&t.ownerDocument,d=t?t.nodeTyp...
function n (line 1) | function n(){function e(n,r){return t.push(n+" ")>C.cacheLength&&delete ...
function r (line 1) | function r(e){return e[$]=!0,e}
function o (line 1) | function o(e){var t=L.createElement("fieldset");try{return!!e(t)}catch(e...
function i (line 1) | function i(e,t){for(var n=e.split("|"),r=n.length;r--;)C.attrHandle[n[r]...
function s (line 1) | function s(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.source...
function a (line 1) | function a(e){return function(t){var n=t.nodeName.toLowerCase();return"i...
function u (line 1) | function u(e){return function(t){var n=t.nodeName.toLowerCase();return("...
function c (line 1) | function c(e){return function(t){return"form"in t?t.parentNode&&t.disabl...
function l (line 1) | function l(e){return r(function(t){return t=+t,r(function(n,r){for(var o...
function f (line 1) | function f(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}
function p (line 1) | function p(){}
function h (line 1) | function h(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}
function d (line 1) | function d(e,t,n){var r=t.dir,o=t.next,i=o||r,s=n&&"parentNode"===i,a=_+...
function g (line 1) | function g(e){return e.length>1?function(t,n,r){for(var o=e.length;o--;)...
function m (line 1) | function m(e,n,r){for(var o=0,i=n.length;o<i;o++)t(e,n[o],r);return r}
function v (line 1) | function v(e,t,n,r,o){for(var i,s=[],a=0,u=e.length,c=null!=t;a<u;a++)(i...
function y (line 1) | function y(e,t,n,o,i,s){return o&&!o[$]&&(o=y(o)),i&&!i[$]&&(i=y(i,s)),r...
function x (line 1) | function x(e){for(var t,n,r,o=e.length,i=C.relative[e[0].type],s=i||C.re...
function b (line 1) | function b(e,n){var o=n.length>0,i=e.length>0,s=function(r,s,a,u,c){var ...
function i (line 2) | function i(t,n,r,o){return function(){var c=this,l=arguments,f=function(...
function t (line 2) | function t(){if(a){a.style.cssText="box-sizing:border-box;position:relat...
function r (line 3) | function r(t,n,r,a){var c,p,h,b,w,T=n;l||(l=!0,u&&e.clearTimeout(u),o=vo...
function t (line 3) | function t(e,t){for(var n=0,r=e.length-1;r>=0;r--){var o=e[r];"."===o?e....
function r (line 3) | function r(e,t){if(e.filter)return e.filter(t);for(var n=[],r=0;r<e.leng...
function r (line 3) | function r(e){for(var t=0;t<e.length&&""===e[t];t++);for(var n=e.length-...
function r (line 3) | function r(){throw new Error("setTimeout has not been defined")}
function o (line 3) | function o(){throw new Error("clearTimeout has not been defined")}
function i (line 3) | function i(e){if(f===setTimeout)return setTimeout(e,0);if((f===r||!f)&&s...
function s (line 3) | function s(e){if(p===clearTimeout)return clearTimeout(e);if((p===o||!p)&...
function a (line 3) | function a(){m&&d&&(m=!1,d.length?g=d.concat(g):v=-1,g.length&&u())}
function u (line 3) | function u(){if(!m){var e=i(a);m=!0;for(var t=g.length;t;){for(d=g,g=[];...
function c (line 3) | function c(e,t){this.fun=e,this.array=t}
function l (line 3) | function l(){}
function o (line 3) | function o(e){throw new RangeError(L[e])}
function i (line 3) | function i(e,t){for(var n=e.length,r=[];n--;)r[n]=t(e[n]);return r}
function s (line 3) | function s(e,t){var n=e.split("@"),r="";n.length>1&&(r=n[0]+"@",e=n[1]),...
function a (line 3) | function a(e){for(var t,n,r=[],o=0,i=e.length;o<i;)t=e.charCodeAt(o++),t...
function u (line 3) | function u(e){return i(e,function(e){var t="";return e>65535&&(e-=65536,...
function c (line 3) | function c(e){return e-48<10?e-22:e-65<26?e-65:e-97<26?e-97:T}
function l (line 3) | function l(e,t){return e+22+75*(e<26)-((0!=t)<<5)}
function f (line 3) | function f(e,t,n){var r=0;for(e=n?F(e/E):e>>1,e+=F(e/t);e>H*j>>1;r+=T)e=...
function p (line 3) | function p(e){var t,n,r,i,s,a,l,p,h,d,g=[],m=e.length,v=0,y=N,x=S;for(n=...
function h (line 3) | function h(e){var t,n,r,i,s,u,c,p,h,d,g,m,v,y,x,b=[];for(e=a(e),m=e.leng...
function d (line 3) | function d(e){return s(e,function(e){return q.test(e)?p(e.slice(4).toLow...
function g (line 3) | function g(e){return s(e,function(e){return D.test(e)?"xn--"+h(e):e})}
function r (line 3) | function r(e,t){return Object.prototype.hasOwnProperty.call(e,t)}
function r (line 3) | function r(e,t){if(e.map)return e.map(t);for(var n=[],r=0;r<e.length;r++...
function r (line 3) | function r(){this.protocol=null,this.slashes=null,this.auth=null,this.ho...
function o (line 3) | function o(e,t,n){
function i (line 4) | function i(e){return c.isString(e)&&(e=o(e)),e instanceof r?e.format():r...
function s (line 4) | function s(e,t){return o(e,!1,!0).resolve(t)}
function a (line 4) | function a(e,t){return e?o(e,!1,!0).resolveObject(t):t}
function r (line 4) | function r(e){console.log("page has changed",e),o(e),l||(l=!0,c.trigger(...
function o (line 4) | function o(e){f.page=e.page,f.file=e.file,f.gitbook=e.gitbook,f.config=e...
function i (line 4) | function i(){return f}
FILE: gitbook/theme.js
function o (line 1) | function o(a,s){if(!n[a]){if(!t[a]){var u="function"==typeof require&&re...
function n (line 1) | function n(e,t){t=t||te;var n=t.createElement("script");n.text=e,t.head....
function r (line 1) | function r(e){var t=!!e&&"length"in e&&e.length,n=de.type(e);return"func...
function o (line 1) | function o(e,t,n){return de.isFunction(t)?de.grep(e,function(e,r){return...
function i (line 1) | function i(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}
function a (line 1) | function a(e){var t={};return de.each(e.match(qe)||[],function(e,n){t[n]...
function s (line 1) | function s(e){return e}
function u (line 1) | function u(e){throw e}
function l (line 1) | function l(e,t,n){var r;try{e&&de.isFunction(r=e.promise)?r.call(e).done...
function c (line 1) | function c(){te.removeEventListener("DOMContentLoaded",c),e.removeEventL...
function f (line 1) | function f(){this.expando=de.expando+f.uid++}
function p (line 1) | function p(e){return"true"===e||"false"!==e&&("null"===e?null:e===+e+""?...
function h (line 1) | function h(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.rep...
function d (line 1) | function d(e,t,n,r){var o,i=1,a=20,s=r?function(){return r.cur()}:functi...
function g (line 1) | function g(e){var t,n=e.ownerDocument,r=e.nodeName,o=Ue[r];return o?o:(t...
function m (line 1) | function m(e,t){for(var n,r,o=[],i=0,a=e.length;i<a;i++)r=e[i],r.style&&...
function v (line 1) | function v(e,t){var n;return n="undefined"!=typeof e.getElementsByTagNam...
function y (line 1) | function y(e,t){for(var n=0,r=e.length;n<r;n++)Fe.set(e[n],"globalEval",...
function b (line 1) | function b(e,t,n,r,o){for(var i,a,s,u,l,c,f=t.createDocumentFragment(),p...
function x (line 1) | function x(){return!0}
function w (line 1) | function w(){return!1}
function C (line 1) | function C(){try{return te.activeElement}catch(e){}}
function T (line 1) | function T(e,t,n,r,o,i){var a,s;if("object"==typeof t){"string"!=typeof ...
function k (line 1) | function k(e,t){return de.nodeName(e,"table")&&de.nodeName(11!==t.nodeTy...
function j (line 1) | function j(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}
function E (line 1) | function E(e){var t=rt.exec(e.type);return t?e.type=t[1]:e.removeAttribu...
function N (line 1) | function N(e,t){var n,r,o,i,a,s,u,l;if(1===t.nodeType){if(Fe.hasData(e)&...
function S (line 1) | function S(e,t){var n=t.nodeName.toLowerCase();"input"===n&&ze.test(e.ty...
function A (line 1) | function A(e,t,r,o){t=oe.apply([],t);var i,a,s,u,l,c,f=0,p=e.length,h=p-...
function q (line 1) | function q(e,t,n){for(var r,o=t?de.filter(t,e):e,i=0;null!=(r=o[i]);i++)...
function D (line 1) | function D(e,t,n){var r,o,i,a,s=e.style;return n=n||st(e),n&&(a=n.getPro...
function O (line 1) | function O(e,t){return{get:function(){return e()?void delete this.get:(t...
function L (line 1) | function L(e){if(e in pt)return e;for(var t=e[0].toUpperCase()+e.slice(1...
function H (line 1) | function H(e,t,n){var r=$e.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3...
function F (line 1) | function F(e,t,n,r,o){var i,a=0;for(i=n===(r?"border":"content")?4:"widt...
function P (line 1) | function P(e,t,n){var r,o=!0,i=st(e),a="border-box"===de.css(e,"boxSizin...
function I (line 1) | function I(e,t,n,r,o){return new I.prototype.init(e,t,n,r,o)}
function R (line 1) | function R(){dt&&(e.requestAnimationFrame(R),de.fx.tick())}
function M (line 1) | function M(){return e.setTimeout(function(){ht=void 0}),ht=de.now()}
function $ (line 1) | function $(e,t){var n,r=0,o={height:e};for(t=t?1:0;r<4;r+=2-t)n=_e[r],o[...
function _ (line 1) | function _(e,t,n){for(var r,o=(U.tweeners[t]||[]).concat(U.tweeners["*"]...
function W (line 1) | function W(e,t,n){var r,o,i,a,s,u,l,c,f="width"in t||"height"in t,p=this...
function B (line 1) | function B(e,t){var n,r,o,i,a;for(n in e)if(r=de.camelCase(n),o=t[r],i=e...
function U (line 1) | function U(e,t,n){var r,o,i=0,a=U.prefilters.length,s=de.Deferred().alwa...
function z (line 1) | function z(e){var t=e.match(qe)||[];return t.join(" ")}
function X (line 1) | function X(e){return e.getAttribute&&e.getAttribute("class")||""}
function K (line 1) | function K(e,t,n,r){var o;if(de.isArray(t))de.each(t,function(t,o){n||Et...
function V (line 1) | function V(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r...
function G (line 1) | function G(e,t,n,r){function o(s){var u;return i[s]=!0,de.each(e[s]||[],...
function Y (line 1) | function Y(e,t){var n,r,o=de.ajaxSettings.flatOptions||{};for(n in t)voi...
function Q (line 1) | function Q(e,t,n){for(var r,o,i,a,s=e.contents,u=e.dataTypes;"*"===u[0];...
function J (line 1) | function J(e,t,n,r){var o,i,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for...
function Z (line 1) | function Z(e){return de.isWindow(e)?e:9===e.nodeType&&e.defaultView}
function t (line 1) | function t(e,t,n,r){var o,i,a,s,u,l,c,p=t&&t.ownerDocument,d=t?t.nodeTyp...
function n (line 1) | function n(){function e(n,r){return t.push(n+" ")>T.cacheLength&&delete ...
function r (line 1) | function r(e){return e[$]=!0,e}
function o (line 1) | function o(e){var t=L.createElement("fieldset");try{return!!e(t)}catch(e...
function i (line 1) | function i(e,t){for(var n=e.split("|"),r=n.length;r--;)T.attrHandle[n[r]...
function a (line 1) | function a(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.source...
function s (line 1) | function s(e){return function(t){var n=t.nodeName.toLowerCase();return"i...
function u (line 1) | function u(e){return function(t){var n=t.nodeName.toLowerCase();return("...
function l (line 1) | function l(e){return function(t){return"form"in t?t.parentNode&&t.disabl...
function c (line 1) | function c(e){return r(function(t){return t=+t,r(function(n,r){for(var o...
function f (line 1) | function f(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}
function p (line 1) | function p(){}
function h (line 1) | function h(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}
function d (line 1) | function d(e,t,n){var r=t.dir,o=t.next,i=o||r,a=n&&"parentNode"===i,s=B+...
function g (line 1) | function g(e){return e.length>1?function(t,n,r){for(var o=e.length;o--;)...
function m (line 1) | function m(e,n,r){for(var o=0,i=n.length;o<i;o++)t(e,n[o],r);return r}
function v (line 1) | function v(e,t,n,r,o){for(var i,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(i...
function y (line 1) | function y(e,t,n,o,i,a){return o&&!o[$]&&(o=y(o)),i&&!i[$]&&(i=y(i,a)),r...
function b (line 1) | function b(e){for(var t,n,r,o=e.length,i=T.relative[e[0].type],a=i||T.re...
function x (line 1) | function x(e,n){var o=n.length>0,i=e.length>0,a=function(r,a,s,u,l){var ...
function i (line 2) | function i(t,n,r,o){return function(){var l=this,c=arguments,f=function(...
function t (line 2) | function t(){if(s){s.style.cssText="box-sizing:border-box;position:relat...
function r (line 3) | function r(t,n,r,s){var l,p,h,x,w,C=n;c||(c=!0,u&&e.clearTimeout(u),o=vo...
function o (line 3) | function o(e,t,n){return e.addEventListener?void e.addEventListener(t,n,...
function i (line 3) | function i(e){if("keypress"==e.type){var t=String.fromCharCode(e.which);...
function a (line 3) | function a(e,t){return e.sort().join(",")===t.sort().join(",")}
function s (line 3) | function s(e){var t=[];return e.shiftKey&&t.push("shift"),e.altKey&&t.pu...
function u (line 3) | function u(e){return e.preventDefault?void e.preventDefault():void(e.ret...
function l (line 3) | function l(e){return e.stopPropagation?void e.stopPropagation():void(e.c...
function c (line 3) | function c(e){return"shift"==e||"ctrl"==e||"alt"==e||"meta"==e}
function f (line 3) | function f(){if(!v){v={};for(var e in y)e>95&&e<112||y.hasOwnProperty(e)...
function p (line 3) | function p(e,t,n){return n||(n=f()[e]?"keydown":"keypress"),"keypress"==...
function h (line 3) | function h(e){return"+"===e?["+"]:(e=e.replace(/\+{2}/g,"+plus"),e.split...
function d (line 3) | function d(e,t){var n,r,o,i=[];for(n=h(e),o=0;o<n.length;++o)r=n[o],w[r]...
function g (line 3) | function g(e,t){return null!==e&&e!==n&&(e===t||g(e.parentNode,t))}
function m (line 3) | function m(e){function t(e){e=e||{};var t,n=!1;for(t in x)e[t]?n=!0:x[t]...
function o (line 3) | function o(e){throw new RangeError(L[e])}
function i (line 3) | function i(e,t){for(var n=e.length,r=[];n--;)r[n]=t(e[n]);return r}
function a (line 3) | function a(e,t){var n=e.split("@"),r="";n.length>1&&(r=n[0]+"@",e=n[1]),...
function s (line 3) | function s(e){for(var t,n,r=[],o=0,i=e.length;o<i;)t=e.charCodeAt(o++),t...
function u (line 3) | function u(e){return i(e,function(e){var t="";return e>65535&&(e-=65536,...
function l (line 3) | function l(e){return e-48<10?e-22:e-65<26?e-65:e-97<26?e-97:C}
function c (line 3) | function c(e,t){return e+22+75*(e<26)-((0!=t)<<5)}
function f (line 3) | function f(e,t,n){var r=0;for(e=n?F(e/E):e>>1,e+=F(e/t);e>H*k>>1;r+=C)e=...
function p (line 3) | function p(e){var t,n,r,i,a,s,c,p,h,d,g=[],m=e.length,v=0,y=S,b=N;for(n=...
function h (line 3) | function h(e){var t,n,r,i,a,u,l,p,h,d,g,m,v,y,b,x=[];for(e=s(e),m=e.leng...
function d (line 3) | function d(e){return a(e,function(e){return q.test(e)?p(e.slice(4).toLow...
function g (line 3) | function g(e){return a(e,function(e){return D.test(e)?"xn--"+h(e):e})}
function r (line 3) | function r(e,t){return Object.prototype.hasOwnProperty.call(e,t)}
function r (line 4) | function r(e,t){if(e.map)return e.map(t);for(var n=[],r=0;r<e.length;r++...
function r (line 4) | function r(){this.protocol=null,this.slashes=null,this.auth=null,this.ho...
function o (line 4) | function o(e,t,n){if(e&&l.isObject(e)&&e instanceof r)return e;var o=new...
function i (line 4) | function i(e){return l.isString(e)&&(e=o(e)),e instanceof r?e.format():r...
function a (line 4) | function a(e,t){return o(e,!1,!0).resolve(t)}
function s (line 4) | function s(e,t){return e?o(e,!1,!0).resolveObject(t):t}
function r (line 4) | function r(e){var t=a(e.currentTarget).parent().find(".dropdown-menu");t...
function o (line 4) | function o(e){a(".dropdown-menu").removeClass("open")}
function i (line 4) | function i(){a(document).on("click",".toggle-dropdown",r),a(document).on...
function r (line 4) | function r(){s.init(),i.init(),o.init(),a.init(),u.createButton({index:0...
function r (line 4) | function r(e,t){i.bind(e,function(e){return t(),!1})}
function o (line 4) | function o(){r(["right"],function(e){a.goNext()}),r(["left"],function(e)...
function r (line 4) | function r(e){return o.state.$book.addClass("is-loading"),e.always(funct...
function r (line 4) | function r(){return T(E.isSmallScreen()?".book-body":".body-inner")}
function o (line 4) | function o(e){var t=r(),n=0;i(e)&&(e&&(n=u(e)),t.unbind("scroll"),t.anim...
function i (line 4) | function i(e){var t=r(),n=t.find(e);return!!n.length}
function a (line 4) | function a(e){return 0===e.length}
function s (line 4) | function s(e,t){return e.length>0&&e.filter(t).length>0}
function u (line 4) | function u(e){var t=r(),n=t.find(".page-inner"),o=t.find(e),i=o.offsetPa...
function l (line 4) | function l(e,t){if(e||t||(e=w.first()),t&&(e=w.length>1?w.filter(functio...
function c (line 4) | function c(e){var t=e.children("a"),n=t.attr("href").split("#")[1];retur...
function f (line 4) | function f(){var e=r(),t=e.scrollTop(),n=e.prop("scrollHeight"),o=e.prop...
function p (line 4) | function p(e,t){var n=k.parse(A),r=k.resolve(window.location.pathname,e)...
function h (line 4) | function h(){var e,t;e=parseInt(T(".body-inner").css("width"),10),t=pars...
function d (line 4) | function d(e){var t=T(".book-body"),n=t.find(".body-inner"),o=n.find(".p...
function g (line 4) | function g(e){return 0===e.button}
function m (line 4) | function m(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}
function v (line 4) | function v(e){var t=T(this),n=t.attr("target");if(!m(e)&&g(e)&&!n){e.sto...
function y (line 4) | function y(){var e=T(".navigation-next").attr("href");e&&p(e,!0)}
function b (line 4) | function b(){var e=T(".navigation-prev").attr("href");e&&p(e,!0)}
function x (line 4) | function x(){T.ajaxSetup({cache:!1}),history.replaceState({path:window.l...
function r (line 4) | function r(e,t){null!=l.state&&o()==e||(null==t&&(t=!0),l.state.$book.to...
function o (line 4) | function o(){return l.state.$book.hasClass("with-summary")}
function i (line 4) | function i(){u.isMobile()||r(l.storage.get("sidebar",!0),!1),s(document)...
function a (line 4) | function a(e){var t=s(".book-summary");t.find("li").each(function(){var ...
function r (line 4) | function r(){return"btn-"+g++}
function o (line 4) | function o(e,t,n,r){var o=e.children(t).length;n<0&&(n=Math.max(0,o+1+n)...
function i (line 4) | function i(e){e.preventDefault()}
function a (line 4) | function a(e){var t=p("<div>",{class:"dropdown-menu",html:'<div class="d...
function s (line 4) | function s(e){return e=p.extend({label:"",icon:"",text:"",position:"left...
function u (line 4) | function u(e){var t,n=p(".book-header"),r=n.find("h1"),i="pull-"+e.posit...
function l (line 4) | function l(){p(".js-toolbar-action").remove(),d.forEach(u)}
function c (line 4) | function c(e){d=p.grep(d,function(t){return t.id!=e}),l()}
function f (line 4) | function f(e){d=p.grep(d,function(t){return e.indexOf(t.id)==-1}),l()}
FILE: ko/gitbook/gitbook.js
function o (line 1) | function o(s,a){if(!n[s]){if(!t[s]){var u="function"==typeof require&&re...
function n (line 1) | function n(e,t){t=t||te;var n=t.createElement("script");n.text=e,t.head....
function r (line 1) | function r(e){var t=!!e&&"length"in e&&e.length,n=de.type(e);return"func...
function o (line 1) | function o(e,t,n){return de.isFunction(t)?de.grep(e,function(e,r){return...
function i (line 1) | function i(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}
function s (line 1) | function s(e){var t={};return de.each(e.match(qe)||[],function(e,n){t[n]...
function a (line 1) | function a(e){return e}
function u (line 1) | function u(e){throw e}
function c (line 1) | function c(e,t,n){var r;try{e&&de.isFunction(r=e.promise)?r.call(e).done...
function l (line 1) | function l(){te.removeEventListener("DOMContentLoaded",l),e.removeEventL...
function f (line 1) | function f(){this.expando=de.expando+f.uid++}
function p (line 1) | function p(e){return"true"===e||"false"!==e&&("null"===e?null:e===+e+""?...
function h (line 1) | function h(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.rep...
function d (line 1) | function d(e,t,n,r){var o,i=1,s=20,a=r?function(){return r.cur()}:functi...
function g (line 1) | function g(e){var t,n=e.ownerDocument,r=e.nodeName,o=Ue[r];return o?o:(t...
function m (line 1) | function m(e,t){for(var n,r,o=[],i=0,s=e.length;i<s;i++)r=e[i],r.style&&...
function v (line 1) | function v(e,t){var n;return n="undefined"!=typeof e.getElementsByTagNam...
function y (line 1) | function y(e,t){for(var n=0,r=e.length;n<r;n++)Fe.set(e[n],"globalEval",...
function x (line 1) | function x(e,t,n,r,o){for(var i,s,a,u,c,l,f=t.createDocumentFragment(),p...
function b (line 1) | function b(){return!0}
function w (line 1) | function w(){return!1}
function T (line 1) | function T(){try{return te.activeElement}catch(e){}}
function C (line 1) | function C(e,t,n,r,o,i){var s,a;if("object"==typeof t){"string"!=typeof ...
function j (line 1) | function j(e,t){return de.nodeName(e,"table")&&de.nodeName(11!==t.nodeTy...
function k (line 1) | function k(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}
function E (line 1) | function E(e){var t=rt.exec(e.type);return t?e.type=t[1]:e.removeAttribu...
function S (line 1) | function S(e,t){var n,r,o,i,s,a,u,c;if(1===t.nodeType){if(Fe.hasData(e)&...
function N (line 1) | function N(e,t){var n=t.nodeName.toLowerCase();"input"===n&&ze.test(e.ty...
function A (line 1) | function A(e,t,r,o){t=oe.apply([],t);var i,s,a,u,c,l,f=0,p=e.length,h=p-...
function q (line 1) | function q(e,t,n){for(var r,o=t?de.filter(t,e):e,i=0;null!=(r=o[i]);i++)...
function D (line 1) | function D(e,t,n){var r,o,i,s,a=e.style;return n=n||at(e),n&&(s=n.getPro...
function O (line 1) | function O(e,t){return{get:function(){return e()?void delete this.get:(t...
function L (line 1) | function L(e){if(e in pt)return e;for(var t=e[0].toUpperCase()+e.slice(1...
function H (line 1) | function H(e,t,n){var r=$e.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3...
function F (line 1) | function F(e,t,n,r,o){var i,s=0;for(i=n===(r?"border":"content")?4:"widt...
function R (line 1) | function R(e,t,n){var r,o=!0,i=at(e),s="border-box"===de.css(e,"boxSizin...
function I (line 1) | function I(e,t,n,r,o){return new I.prototype.init(e,t,n,r,o)}
function P (line 1) | function P(){dt&&(e.requestAnimationFrame(P),de.fx.tick())}
function M (line 1) | function M(){return e.setTimeout(function(){ht=void 0}),ht=de.now()}
function $ (line 1) | function $(e,t){var n,r=0,o={height:e};for(t=t?1:0;r<4;r+=2-t)n=We[r],o[...
function W (line 1) | function W(e,t,n){for(var r,o=(U.tweeners[t]||[]).concat(U.tweeners["*"]...
function B (line 1) | function B(e,t,n){var r,o,i,s,a,u,c,l,f="width"in t||"height"in t,p=this...
function _ (line 1) | function _(e,t){var n,r,o,i,s;for(n in e)if(r=de.camelCase(n),o=t[r],i=e...
function U (line 1) | function U(e,t,n){var r,o,i=0,s=U.prefilters.length,a=de.Deferred().alwa...
function z (line 1) | function z(e){var t=e.match(qe)||[];return t.join(" ")}
function X (line 1) | function X(e){return e.getAttribute&&e.getAttribute("class")||""}
function V (line 1) | function V(e,t,n,r){var o;if(de.isArray(t))de.each(t,function(t,o){n||Et...
function G (line 1) | function G(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r...
function Y (line 1) | function Y(e,t,n,r){function o(a){var u;return i[a]=!0,de.each(e[a]||[],...
function Q (line 1) | function Q(e,t){var n,r,o=de.ajaxSettings.flatOptions||{};for(n in t)voi...
function J (line 1) | function J(e,t,n){for(var r,o,i,s,a=e.contents,u=e.dataTypes;"*"===u[0];...
function K (line 1) | function K(e,t,n,r){var o,i,s,a,u,c={},l=e.dataTypes.slice();if(l[1])for...
function Z (line 1) | function Z(e){return de.isWindow(e)?e:9===e.nodeType&&e.defaultView}
function t (line 1) | function t(e,t,n,r){var o,i,s,a,u,c,l,p=t&&t.ownerDocument,d=t?t.nodeTyp...
function n (line 1) | function n(){function e(n,r){return t.push(n+" ")>C.cacheLength&&delete ...
function r (line 1) | function r(e){return e[$]=!0,e}
function o (line 1) | function o(e){var t=L.createElement("fieldset");try{return!!e(t)}catch(e...
function i (line 1) | function i(e,t){for(var n=e.split("|"),r=n.length;r--;)C.attrHandle[n[r]...
function s (line 1) | function s(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.source...
function a (line 1) | function a(e){return function(t){var n=t.nodeName.toLowerCase();return"i...
function u (line 1) | function u(e){return function(t){var n=t.nodeName.toLowerCase();return("...
function c (line 1) | function c(e){return function(t){return"form"in t?t.parentNode&&t.disabl...
function l (line 1) | function l(e){return r(function(t){return t=+t,r(function(n,r){for(var o...
function f (line 1) | function f(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}
function p (line 1) | function p(){}
function h (line 1) | function h(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}
function d (line 1) | function d(e,t,n){var r=t.dir,o=t.next,i=o||r,s=n&&"parentNode"===i,a=_+...
function g (line 1) | function g(e){return e.length>1?function(t,n,r){for(var o=e.length;o--;)...
function m (line 1) | function m(e,n,r){for(var o=0,i=n.length;o<i;o++)t(e,n[o],r);return r}
function v (line 1) | function v(e,t,n,r,o){for(var i,s=[],a=0,u=e.length,c=null!=t;a<u;a++)(i...
function y (line 1) | function y(e,t,n,o,i,s){return o&&!o[$]&&(o=y(o)),i&&!i[$]&&(i=y(i,s)),r...
function x (line 1) | function x(e){for(var t,n,r,o=e.length,i=C.relative[e[0].type],s=i||C.re...
function b (line 1) | function b(e,n){var o=n.length>0,i=e.length>0,s=function(r,s,a,u,c){var ...
function i (line 2) | function i(t,n,r,o){return function(){var c=this,l=arguments,f=function(...
function t (line 2) | function t(){if(a){a.style.cssText="box-sizing:border-box;position:relat...
function r (line 3) | function r(t,n,r,a){var c,p,h,b,w,T=n;l||(l=!0,u&&e.clearTimeout(u),o=vo...
function t (line 3) | function t(e,t){for(var n=0,r=e.length-1;r>=0;r--){var o=e[r];"."===o?e....
function r (line 3) | function r(e,t){if(e.filter)return e.filter(t);for(var n=[],r=0;r<e.leng...
function r (line 3) | function r(e){for(var t=0;t<e.length&&""===e[t];t++);for(var n=e.length-...
function r (line 3) | function r(){throw new Error("setTimeout has not been defined")}
function o (line 3) | function o(){throw new Error("clearTimeout has not been defined")}
function i (line 3) | function i(e){if(f===setTimeout)return setTimeout(e,0);if((f===r||!f)&&s...
function s (line 3) | function s(e){if(p===clearTimeout)return clearTimeout(e);if((p===o||!p)&...
function a (line 3) | function a(){m&&d&&(m=!1,d.length?g=d.concat(g):v=-1,g.length&&u())}
function u (line 3) | function u(){if(!m){var e=i(a);m=!0;for(var t=g.length;t;){for(d=g,g=[];...
function c (line 3) | function c(e,t){this.fun=e,this.array=t}
function l (line 3) | function l(){}
function o (line 3) | function o(e){throw new RangeError(L[e])}
function i (line 3) | function i(e,t){for(var n=e.length,r=[];n--;)r[n]=t(e[n]);return r}
function s (line 3) | function s(e,t){var n=e.split("@"),r="";n.length>1&&(r=n[0]+"@",e=n[1]),...
function a (line 3) | function a(e){for(var t,n,r=[],o=0,i=e.length;o<i;)t=e.charCodeAt(o++),t...
function u (line 3) | function u(e){return i(e,function(e){var t="";return e>65535&&(e-=65536,...
function c (line 3) | function c(e){return e-48<10?e-22:e-65<26?e-65:e-97<26?e-97:T}
function l (line 3) | function l(e,t){return e+22+75*(e<26)-((0!=t)<<5)}
function f (line 3) | function f(e,t,n){var r=0;for(e=n?F(e/E):e>>1,e+=F(e/t);e>H*j>>1;r+=T)e=...
function p (line 3) | function p(e){var t,n,r,i,s,a,l,p,h,d,g=[],m=e.length,v=0,y=N,x=S;for(n=...
function h (line 3) | function h(e){var t,n,r,i,s,u,c,p,h,d,g,m,v,y,x,b=[];for(e=a(e),m=e.leng...
function d (line 3) | function d(e){return s(e,function(e){return q.test(e)?p(e.slice(4).toLow...
function g (line 3) | function g(e){return s(e,function(e){return D.test(e)?"xn--"+h(e):e})}
function r (line 3) | function r(e,t){return Object.prototype.hasOwnProperty.call(e,t)}
function r (line 3) | function r(e,t){if(e.map)return e.map(t);for(var n=[],r=0;r<e.length;r++...
function r (line 3) | function r(){this.protocol=null,this.slashes=null,this.auth=null,this.ho...
function o (line 3) | function o(e,t,n){
function i (line 4) | function i(e){return c.isString(e)&&(e=o(e)),e instanceof r?e.format():r...
function s (line 4) | function s(e,t){return o(e,!1,!0).resolve(t)}
function a (line 4) | function a(e,t){return e?o(e,!1,!0).resolveObject(t):t}
function r (line 4) | function r(e){console.log("page has changed",e),o(e),l||(l=!0,c.trigger(...
function o (line 4) | function o(e){f.page=e.page,f.file=e.file,f.gitbook=e.gitbook,f.config=e...
function i (line 4) | function i(){return f}
FILE: ko/gitbook/theme.js
function o (line 1) | function o(a,s){if(!n[a]){if(!t[a]){var u="function"==typeof require&&re...
function n (line 1) | function n(e,t){t=t||te;var n=t.createElement("script");n.text=e,t.head....
function r (line 1) | function r(e){var t=!!e&&"length"in e&&e.length,n=de.type(e);return"func...
function o (line 1) | function o(e,t,n){return de.isFunction(t)?de.grep(e,function(e,r){return...
function i (line 1) | function i(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}
function a (line 1) | function a(e){var t={};return de.each(e.match(qe)||[],function(e,n){t[n]...
function s (line 1) | function s(e){return e}
function u (line 1) | function u(e){throw e}
function l (line 1) | function l(e,t,n){var r;try{e&&de.isFunction(r=e.promise)?r.call(e).done...
function c (line 1) | function c(){te.removeEventListener("DOMContentLoaded",c),e.removeEventL...
function f (line 1) | function f(){this.expando=de.expando+f.uid++}
function p (line 1) | function p(e){return"true"===e||"false"!==e&&("null"===e?null:e===+e+""?...
function h (line 1) | function h(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.rep...
function d (line 1) | function d(e,t,n,r){var o,i=1,a=20,s=r?function(){return r.cur()}:functi...
function g (line 1) | function g(e){var t,n=e.ownerDocument,r=e.nodeName,o=Ue[r];return o?o:(t...
function m (line 1) | function m(e,t){for(var n,r,o=[],i=0,a=e.length;i<a;i++)r=e[i],r.style&&...
function v (line 1) | function v(e,t){var n;return n="undefined"!=typeof e.getElementsByTagNam...
function y (line 1) | function y(e,t){for(var n=0,r=e.length;n<r;n++)Fe.set(e[n],"globalEval",...
function b (line 1) | function b(e,t,n,r,o){for(var i,a,s,u,l,c,f=t.createDocumentFragment(),p...
function x (line 1) | function x(){return!0}
function w (line 1) | function w(){return!1}
function C (line 1) | function C(){try{return te.activeElement}catch(e){}}
function T (line 1) | function T(e,t,n,r,o,i){var a,s;if("object"==typeof t){"string"!=typeof ...
function k (line 1) | function k(e,t){return de.nodeName(e,"table")&&de.nodeName(11!==t.nodeTy...
function j (line 1) | function j(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}
function E (line 1) | function E(e){var t=rt.exec(e.type);return t?e.type=t[1]:e.removeAttribu...
function N (line 1) | function N(e,t){var n,r,o,i,a,s,u,l;if(1===t.nodeType){if(Fe.hasData(e)&...
function S (line 1) | function S(e,t){var n=t.nodeName.toLowerCase();"input"===n&&ze.test(e.ty...
function A (line 1) | function A(e,t,r,o){t=oe.apply([],t);var i,a,s,u,l,c,f=0,p=e.length,h=p-...
function q (line 1) | function q(e,t,n){for(var r,o=t?de.filter(t,e):e,i=0;null!=(r=o[i]);i++)...
function D (line 1) | function D(e,t,n){var r,o,i,a,s=e.style;return n=n||st(e),n&&(a=n.getPro...
function O (line 1) | function O(e,t){return{get:function(){return e()?void delete this.get:(t...
function L (line 1) | function L(e){if(e in pt)return e;for(var t=e[0].toUpperCase()+e.slice(1...
function H (line 1) | function H(e,t,n){var r=$e.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3...
function F (line 1) | function F(e,t,n,r,o){var i,a=0;for(i=n===(r?"border":"content")?4:"widt...
function P (line 1) | function P(e,t,n){var r,o=!0,i=st(e),a="border-box"===de.css(e,"boxSizin...
function I (line 1) | function I(e,t,n,r,o){return new I.prototype.init(e,t,n,r,o)}
function R (line 1) | function R(){dt&&(e.requestAnimationFrame(R),de.fx.tick())}
function M (line 1) | function M(){return e.setTimeout(function(){ht=void 0}),ht=de.now()}
function $ (line 1) | function $(e,t){var n,r=0,o={height:e};for(t=t?1:0;r<4;r+=2-t)n=_e[r],o[...
function _ (line 1) | function _(e,t,n){for(var r,o=(U.tweeners[t]||[]).concat(U.tweeners["*"]...
function W (line 1) | function W(e,t,n){var r,o,i,a,s,u,l,c,f="width"in t||"height"in t,p=this...
function B (line 1) | function B(e,t){var n,r,o,i,a;for(n in e)if(r=de.camelCase(n),o=t[r],i=e...
function U (line 1) | function U(e,t,n){var r,o,i=0,a=U.prefilters.length,s=de.Deferred().alwa...
function z (line 1) | function z(e){var t=e.match(qe)||[];return t.join(" ")}
function X (line 1) | function X(e){return e.getAttribute&&e.getAttribute("class")||""}
function K (line 1) | function K(e,t,n,r){var o;if(de.isArray(t))de.each(t,function(t,o){n||Et...
function V (line 1) | function V(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r...
function G (line 1) | function G(e,t,n,r){function o(s){var u;return i[s]=!0,de.each(e[s]||[],...
function Y (line 1) | function Y(e,t){var n,r,o=de.ajaxSettings.flatOptions||{};for(n in t)voi...
function Q (line 1) | function Q(e,t,n){for(var r,o,i,a,s=e.contents,u=e.dataTypes;"*"===u[0];...
function J (line 1) | function J(e,t,n,r){var o,i,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for...
function Z (line 1) | function Z(e){return de.isWindow(e)?e:9===e.nodeType&&e.defaultView}
function t (line 1) | function t(e,t,n,r){var o,i,a,s,u,l,c,p=t&&t.ownerDocument,d=t?t.nodeTyp...
function n (line 1) | function n(){function e(n,r){return t.push(n+" ")>T.cacheLength&&delete ...
function r (line 1) | function r(e){return e[$]=!0,e}
function o (line 1) | function o(e){var t=L.createElement("fieldset");try{return!!e(t)}catch(e...
function i (line 1) | function i(e,t){for(var n=e.split("|"),r=n.length;r--;)T.attrHandle[n[r]...
function a (line 1) | function a(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.source...
function s (line 1) | function s(e){return function(t){var n=t.nodeName.toLowerCase();return"i...
function u (line 1) | function u(e){return function(t){var n=t.nodeName.toLowerCase();return("...
function l (line 1) | function l(e){return function(t){return"form"in t?t.parentNode&&t.disabl...
function c (line 1) | function c(e){return r(function(t){return t=+t,r(function(n,r){for(var o...
function f (line 1) | function f(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}
function p (line 1) | function p(){}
function h (line 1) | function h(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}
function d (line 1) | function d(e,t,n){var r=t.dir,o=t.next,i=o||r,a=n&&"parentNode"===i,s=B+...
function g (line 1) | function g(e){return e.length>1?function(t,n,r){for(var o=e.length;o--;)...
function m (line 1) | function m(e,n,r){for(var o=0,i=n.length;o<i;o++)t(e,n[o],r);return r}
function v (line 1) | function v(e,t,n,r,o){for(var i,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(i...
function y (line 1) | function y(e,t,n,o,i,a){return o&&!o[$]&&(o=y(o)),i&&!i[$]&&(i=y(i,a)),r...
function b (line 1) | function b(e){for(var t,n,r,o=e.length,i=T.relative[e[0].type],a=i||T.re...
function x (line 1) | function x(e,n){var o=n.length>0,i=e.length>0,a=function(r,a,s,u,l){var ...
function i (line 2) | function i(t,n,r,o){return function(){var l=this,c=arguments,f=function(...
function t (line 2) | function t(){if(s){s.style.cssText="box-sizing:border-box;position:relat...
function r (line 3) | function r(t,n,r,s){var l,p,h,x,w,C=n;c||(c=!0,u&&e.clearTimeout(u),o=vo...
function o (line 3) | function o(e,t,n){return e.addEventListener?void e.addEventListener(t,n,...
function i (line 3) | function i(e){if("keypress"==e.type){var t=String.fromCharCode(e.which);...
function a (line 3) | function a(e,t){return e.sort().join(",")===t.sort().join(",")}
function s (line 3) | function s(e){var t=[];return e.shiftKey&&t.push("shift"),e.altKey&&t.pu...
function u (line 3) | function u(e){return e.preventDefault?void e.preventDefault():void(e.ret...
function l (line 3) | function l(e){return e.stopPropagation?void e.stopPropagation():void(e.c...
function c (line 3) | function c(e){return"shift"==e||"ctrl"==e||"alt"==e||"meta"==e}
function f (line 3) | function f(){if(!v){v={};for(var e in y)e>95&&e<112||y.hasOwnProperty(e)...
function p (line 3) | function p(e,t,n){return n||(n=f()[e]?"keydown":"keypress"),"keypress"==...
function h (line 3) | function h(e){return"+"===e?["+"]:(e=e.replace(/\+{2}/g,"+plus"),e.split...
function d (line 3) | function d(e,t){var n,r,o,i=[];for(n=h(e),o=0;o<n.length;++o)r=n[o],w[r]...
function g (line 3) | function g(e,t){return null!==e&&e!==n&&(e===t||g(e.parentNode,t))}
function m (line 3) | function m(e){function t(e){e=e||{};var t,n=!1;for(t in x)e[t]?n=!0:x[t]...
function o (line 3) | function o(e){throw new RangeError(L[e])}
function i (line 3) | function i(e,t){for(var n=e.length,r=[];n--;)r[n]=t(e[n]);return r}
function a (line 3) | function a(e,t){var n=e.split("@"),r="";n.length>1&&(r=n[0]+"@",e=n[1]),...
function s (line 3) | function s(e){for(var t,n,r=[],o=0,i=e.length;o<i;)t=e.charCodeAt(o++),t...
function u (line 3) | function u(e){return i(e,function(e){var t="";return e>65535&&(e-=65536,...
function l (line 3) | function l(e){return e-48<10?e-22:e-65<26?e-65:e-97<26?e-97:C}
function c (line 3) | function c(e,t){return e+22+75*(e<26)-((0!=t)<<5)}
function f (line 3) | function f(e,t,n){var r=0;for(e=n?F(e/E):e>>1,e+=F(e/t);e>H*k>>1;r+=C)e=...
function p (line 3) | function p(e){var t,n,r,i,a,s,c,p,h,d,g=[],m=e.length,v=0,y=S,b=N;for(n=...
function h (line 3) | function h(e){var t,n,r,i,a,u,l,p,h,d,g,m,v,y,b,x=[];for(e=s(e),m=e.leng...
function d (line 3) | function d(e){return a(e,function(e){return q.test(e)?p(e.slice(4).toLow...
function g (line 3) | function g(e){return a(e,function(e){return D.test(e)?"xn--"+h(e):e})}
function r (line 3) | function r(e,t){return Object.prototype.hasOwnProperty.call(e,t)}
function r (line 4) | function r(e,t){if(e.map)return e.map(t);for(var n=[],r=0;r<e.length;r++...
function r (line 4) | function r(){this.protocol=null,this.slashes=null,this.auth=null,this.ho...
function o (line 4) | function o(e,t,n){if(e&&l.isObject(e)&&e instanceof r)return e;var o=new...
function i (line 4) | function i(e){return l.isString(e)&&(e=o(e)),e instanceof r?e.format():r...
function a (line 4) | function a(e,t){return o(e,!1,!0).resolve(t)}
function s (line 4) | function s(e,t){return e?o(e,!1,!0).resolveObject(t):t}
function r (line 4) | function r(e){var t=a(e.currentTarget).parent().find(".dropdown-menu");t...
function o (line 4) | function o(e){a(".dropdown-menu").removeClass("open")}
function i (line 4) | function i(){a(document).on("click",".toggle-dropdown",r),a(document).on...
function r (line 4) | function r(){s.init(),i.init(),o.init(),a.init(),u.createButton({index:0...
function r (line 4) | function r(e,t){i.bind(e,function(e){return t(),!1})}
function o (line 4) | function o(){r(["right"],function(e){a.goNext()}),r(["left"],function(e)...
function r (line 4) | function r(e){return o.state.$book.addClass("is-loading"),e.always(funct...
function r (line 4) | function r(){return T(E.isSmallScreen()?".book-body":".body-inner")}
function o (line 4) | function o(e){var t=r(),n=0;i(e)&&(e&&(n=u(e)),t.unbind("scroll"),t.anim...
function i (line 4) | function i(e){var t=r(),n=t.find(e);return!!n.length}
function a (line 4) | function a(e){return 0===e.length}
function s (line 4) | function s(e,t){return e.length>0&&e.filter(t).length>0}
function u (line 4) | function u(e){var t=r(),n=t.find(".page-inner"),o=t.find(e),i=o.offsetPa...
function l (line 4) | function l(e,t){if(e||t||(e=w.first()),t&&(e=w.length>1?w.filter(functio...
function c (line 4) | function c(e){var t=e.children("a"),n=t.attr("href").split("#")[1];retur...
function f (line 4) | function f(){var e=r(),t=e.scrollTop(),n=e.prop("scrollHeight"),o=e.prop...
function p (line 4) | function p(e,t){var n=k.parse(A),r=k.resolve(window.location.pathname,e)...
function h (line 4) | function h(){var e,t;e=parseInt(T(".body-inner").css("width"),10),t=pars...
function d (line 4) | function d(e){var t=T(".book-body"),n=t.find(".body-inner"),o=n.find(".p...
function g (line 4) | function g(e){return 0===e.button}
function m (line 4) | function m(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}
function v (line 4) | function v(e){var t=T(this),n=t.attr("target");if(!m(e)&&g(e)&&!n){e.sto...
function y (line 4) | function y(){var e=T(".navigation-next").attr("href");e&&p(e,!0)}
function b (line 4) | function b(){var e=T(".navigation-prev").attr("href");e&&p(e,!0)}
function x (line 4) | function x(){T.ajaxSetup({cache:!1}),history.replaceState({path:window.l...
function r (line 4) | function r(e,t){null!=l.state&&o()==e||(null==t&&(t=!0),l.state.$book.to...
function o (line 4) | function o(){return l.state.$book.hasClass("with-summary")}
function i (line 4) | function i(){u.isMobile()||r(l.storage.get("sidebar",!0),!1),s(document)...
function a (line 4) | function a(e){var t=s(".book-summary");t.find("li").each(function(){var ...
function r (line 4) | function r(){return"btn-"+g++}
function o (line 4) | function o(e,t,n,r){var o=e.children(t).length;n<0&&(n=Math.max(0,o+1+n)...
function i (line 4) | function i(e){e.preventDefault()}
function a (line 4) | function a(e){var t=p("<div>",{class:"dropdown-menu",html:'<div class="d...
function s (line 4) | function s(e){return e=p.extend({label:"",icon:"",text:"",position:"left...
function u (line 4) | function u(e){var t,n=p(".book-header"),r=n.find("h1"),i="pull-"+e.posit...
function l (line 4) | function l(){p(".js-toolbar-action").remove(),d.forEach(u)}
function c (line 4) | function c(e){d=p.grep(d,function(t){return t.id!=e}),l()}
function f (line 4) | function f(e){d=p.grep(d,function(t){return e.indexOf(t.id)==-1}),l()}
FILE: ru/gitbook/gitbook.js
function o (line 1) | function o(s,a){if(!n[s]){if(!t[s]){var u="function"==typeof require&&re...
function n (line 1) | function n(e,t){t=t||te;var n=t.createElement("script");n.text=e,t.head....
function r (line 1) | function r(e){var t=!!e&&"length"in e&&e.length,n=de.type(e);return"func...
function o (line 1) | function o(e,t,n){return de.isFunction(t)?de.grep(e,function(e,r){return...
function i (line 1) | function i(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}
function s (line 1) | function s(e){var t={};return de.each(e.match(qe)||[],function(e,n){t[n]...
function a (line 1) | function a(e){return e}
function u (line 1) | function u(e){throw e}
function c (line 1) | function c(e,t,n){var r;try{e&&de.isFunction(r=e.promise)?r.call(e).done...
function l (line 1) | function l(){te.removeEventListener("DOMContentLoaded",l),e.removeEventL...
function f (line 1) | function f(){this.expando=de.expando+f.uid++}
function p (line 1) | function p(e){return"true"===e||"false"!==e&&("null"===e?null:e===+e+""?...
function h (line 1) | function h(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.rep...
function d (line 1) | function d(e,t,n,r){var o,i=1,s=20,a=r?function(){return r.cur()}:functi...
function g (line 1) | function g(e){var t,n=e.ownerDocument,r=e.nodeName,o=Ue[r];return o?o:(t...
function m (line 1) | function m(e,t){for(var n,r,o=[],i=0,s=e.length;i<s;i++)r=e[i],r.style&&...
function v (line 1) | function v(e,t){var n;return n="undefined"!=typeof e.getElementsByTagNam...
function y (line 1) | function y(e,t){for(var n=0,r=e.length;n<r;n++)Fe.set(e[n],"globalEval",...
function x (line 1) | function x(e,t,n,r,o){for(var i,s,a,u,c,l,f=t.createDocumentFragment(),p...
function b (line 1) | function b(){return!0}
function w (line 1) | function w(){return!1}
function T (line 1) | function T(){try{return te.activeElement}catch(e){}}
function C (line 1) | function C(e,t,n,r,o,i){var s,a;if("object"==typeof t){"string"!=typeof ...
function j (line 1) | function j(e,t){return de.nodeName(e,"table")&&de.nodeName(11!==t.nodeTy...
function k (line 1) | function k(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}
function E (line 1) | function E(e){var t=rt.exec(e.type);return t?e.type=t[1]:e.removeAttribu...
function S (line 1) | function S(e,t){var n,r,o,i,s,a,u,c;if(1===t.nodeType){if(Fe.hasData(e)&...
function N (line 1) | function N(e,t){var n=t.nodeName.toLowerCase();"input"===n&&ze.test(e.ty...
function A (line 1) | function A(e,t,r,o){t=oe.apply([],t);var i,s,a,u,c,l,f=0,p=e.length,h=p-...
function q (line 1) | function q(e,t,n){for(var r,o=t?de.filter(t,e):e,i=0;null!=(r=o[i]);i++)...
function D (line 1) | function D(e,t,n){var r,o,i,s,a=e.style;return n=n||at(e),n&&(s=n.getPro...
function O (line 1) | function O(e,t){return{get:function(){return e()?void delete this.get:(t...
function L (line 1) | function L(e){if(e in pt)return e;for(var t=e[0].toUpperCase()+e.slice(1...
function H (line 1) | function H(e,t,n){var r=$e.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3...
function F (line 1) | function F(e,t,n,r,o){var i,s=0;for(i=n===(r?"border":"content")?4:"widt...
function R (line 1) | function R(e,t,n){var r,o=!0,i=at(e),s="border-box"===de.css(e,"boxSizin...
function I (line 1) | function I(e,t,n,r,o){return new I.prototype.init(e,t,n,r,o)}
function P (line 1) | function P(){dt&&(e.requestAnimationFrame(P),de.fx.tick())}
function M (line 1) | function M(){return e.setTimeout(function(){ht=void 0}),ht=de.now()}
function $ (line 1) | function $(e,t){var n,r=0,o={height:e};for(t=t?1:0;r<4;r+=2-t)n=We[r],o[...
function W (line 1) | function W(e,t,n){for(var r,o=(U.tweeners[t]||[]).concat(U.tweeners["*"]...
function B (line 1) | function B(e,t,n){var r,o,i,s,a,u,c,l,f="width"in t||"height"in t,p=this...
function _ (line 1) | function _(e,t){var n,r,o,i,s;for(n in e)if(r=de.camelCase(n),o=t[r],i=e...
function U (line 1) | function U(e,t,n){var r,o,i=0,s=U.prefilters.length,a=de.Deferred().alwa...
function z (line 1) | function z(e){var t=e.match(qe)||[];return t.join(" ")}
function X (line 1) | function X(e){return e.getAttribute&&e.getAttribute("class")||""}
function V (line 1) | function V(e,t,n,r){var o;if(de.isArray(t))de.each(t,function(t,o){n||Et...
function G (line 1) | function G(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r...
function Y (line 1) | function Y(e,t,n,r){function o(a){var u;return i[a]=!0,de.each(e[a]||[],...
function Q (line 1) | function Q(e,t){var n,r,o=de.ajaxSettings.flatOptions||{};for(n in t)voi...
function J (line 1) | function J(e,t,n){for(var r,o,i,s,a=e.contents,u=e.dataTypes;"*"===u[0];...
function K (line 1) | function K(e,t,n,r){var o,i,s,a,u,c={},l=e.dataTypes.slice();if(l[1])for...
function Z (line 1) | function Z(e){return de.isWindow(e)?e:9===e.nodeType&&e.defaultView}
function t (line 1) | function t(e,t,n,r){var o,i,s,a,u,c,l,p=t&&t.ownerDocument,d=t?t.nodeTyp...
function n (line 1) | function n(){function e(n,r){return t.push(n+" ")>C.cacheLength&&delete ...
function r (line 1) | function r(e){return e[$]=!0,e}
function o (line 1) | function o(e){var t=L.createElement("fieldset");try{return!!e(t)}catch(e...
function i (line 1) | function i(e,t){for(var n=e.split("|"),r=n.length;r--;)C.attrHandle[n[r]...
function s (line 1) | function s(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.source...
function a (line 1) | function a(e){return function(t){var n=t.nodeName.toLowerCase();return"i...
function u (line 1) | function u(e){return function(t){var n=t.nodeName.toLowerCase();return("...
function c (line 1) | function c(e){return function(t){return"form"in t?t.parentNode&&t.disabl...
function l (line 1) | function l(e){return r(function(t){return t=+t,r(function(n,r){for(var o...
function f (line 1) | function f(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}
function p (line 1) | function p(){}
function h (line 1) | function h(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}
function d (line 1) | function d(e,t,n){var r=t.dir,o=t.next,i=o||r,s=n&&"parentNode"===i,a=_+...
function g (line 1) | function g(e){return e.length>1?function(t,n,r){for(var o=e.length;o--;)...
function m (line 1) | function m(e,n,r){for(var o=0,i=n.length;o<i;o++)t(e,n[o],r);return r}
function v (line 1) | function v(e,t,n,r,o){for(var i,s=[],a=0,u=e.length,c=null!=t;a<u;a++)(i...
function y (line 1) | function y(e,t,n,o,i,s){return o&&!o[$]&&(o=y(o)),i&&!i[$]&&(i=y(i,s)),r...
function x (line 1) | function x(e){for(var t,n,r,o=e.length,i=C.relative[e[0].type],s=i||C.re...
function b (line 1) | function b(e,n){var o=n.length>0,i=e.length>0,s=function(r,s,a,u,c){var ...
function i (line 2) | function i(t,n,r,o){return function(){var c=this,l=arguments,f=function(...
function t (line 2) | function t(){if(a){a.style.cssText="box-sizing:border-box;position:relat...
function r (line 3) | function r(t,n,r,a){var c,p,h,b,w,T=n;l||(l=!0,u&&e.clearTimeout(u),o=vo...
function t (line 3) | function t(e,t){for(var n=0,r=e.length-1;r>=0;r--){var o=e[r];"."===o?e....
function r (line 3) | function r(e,t){if(e.filter)return e.filter(t);for(var n=[],r=0;r<e.leng...
function r (line 3) | function r(e){for(var t=0;t<e.length&&""===e[t];t++);for(var n=e.length-...
function r (line 3) | function r(){throw new Error("setTimeout has not been defined")}
function o (line 3) | function o(){throw new Error("clearTimeout has not been defined")}
function i (line 3) | function i(e){if(f===setTimeout)return setTimeout(e,0);if((f===r||!f)&&s...
function s (line 3) | function s(e){if(p===clearTimeout)return clearTimeout(e);if((p===o||!p)&...
function a (line 3) | function a(){m&&d&&(m=!1,d.length?g=d.concat(g):v=-1,g.length&&u())}
function u (line 3) | function u(){if(!m){var e=i(a);m=!0;for(var t=g.length;t;){for(d=g,g=[];...
function c (line 3) | function c(e,t){this.fun=e,this.array=t}
function l (line 3) | function l(){}
function o (line 3) | function o(e){throw new RangeError(L[e])}
function i (line 3) | function i(e,t){for(var n=e.length,r=[];n--;)r[n]=t(e[n]);return r}
function s (line 3) | function s(e,t){var n=e.split("@"),r="";n.length>1&&(r=n[0]+"@",e=n[1]),...
function a (line 3) | function a(e){for(var t,n,r=[],o=0,i=e.length;o<i;)t=e.charCodeAt(o++),t...
function u (line 3) | function u(e){return i(e,function(e){var t="";return e>65535&&(e-=65536,...
function c (line 3) | function c(e){return e-48<10?e-22:e-65<26?e-65:e-97<26?e-97:T}
function l (line 3) | function l(e,t){return e+22+75*(e<26)-((0!=t)<<5)}
function f (line 3) | function f(e,t,n){var r=0;for(e=n?F(e/E):e>>1,e+=F(e/t);e>H*j>>1;r+=T)e=...
function p (line 3) | function p(e){var t,n,r,i,s,a,l,p,h,d,g=[],m=e.length,v=0,y=N,x=S;for(n=...
function h (line 3) | function h(e){var t,n,r,i,s,u,c,p,h,d,g,m,v,y,x,b=[];for(e=a(e),m=e.leng...
function d (line 3) | function d(e){return s(e,function(e){return q.test(e)?p(e.slice(4).toLow...
function g (line 3) | function g(e){return s(e,function(e){return D.test(e)?"xn--"+h(e):e})}
function r (line 3) | function r(e,t){return Object.prototype.hasOwnProperty.call(e,t)}
function r (line 3) | function r(e,t){if(e.map)return e.map(t);for(var n=[],r=0;r<e.length;r++...
function r (line 3) | function r(){this.protocol=null,this.slashes=null,this.auth=null,this.ho...
function o (line 3) | function o(e,t,n){
function i (line 4) | function i(e){return c.isString(e)&&(e=o(e)),e instanceof r?e.format():r...
function s (line 4) | function s(e,t){return o(e,!1,!0).resolve(t)}
function a (line 4) | function a(e,t){return e?o(e,!1,!0).resolveObject(t):t}
function r (line 4) | function r(e){console.log("page has changed",e),o(e),l||(l=!0,c.trigger(...
function o (line 4) | function o(e){f.page=e.page,f.file=e.file,f.gitbook=e.gitbook,f.config=e...
function i (line 4) | function i(){return f}
FILE: ru/gitbook/theme.js
function o (line 1) | function o(a,s){if(!n[a]){if(!t[a]){var u="function"==typeof require&&re...
function n (line 1) | function n(e,t){t=t||te;var n=t.createElement("script");n.text=e,t.head....
function r (line 1) | function r(e){var t=!!e&&"length"in e&&e.length,n=de.type(e);return"func...
function o (line 1) | function o(e,t,n){return de.isFunction(t)?de.grep(e,function(e,r){return...
function i (line 1) | function i(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}
function a (line 1) | function a(e){var t={};return de.each(e.match(qe)||[],function(e,n){t[n]...
function s (line 1) | function s(e){return e}
function u (line 1) | function u(e){throw e}
function l (line 1) | function l(e,t,n){var r;try{e&&de.isFunction(r=e.promise)?r.call(e).done...
function c (line 1) | function c(){te.removeEventListener("DOMContentLoaded",c),e.removeEventL...
function f (line 1) | function f(){this.expando=de.expando+f.uid++}
function p (line 1) | function p(e){return"true"===e||"false"!==e&&("null"===e?null:e===+e+""?...
function h (line 1) | function h(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.rep...
function d (line 1) | function d(e,t,n,r){var o,i=1,a=20,s=r?function(){return r.cur()}:functi...
function g (line 1) | function g(e){var t,n=e.ownerDocument,r=e.nodeName,o=Ue[r];return o?o:(t...
function m (line 1) | function m(e,t){for(var n,r,o=[],i=0,a=e.length;i<a;i++)r=e[i],r.style&&...
function v (line 1) | function v(e,t){var n;return n="undefined"!=typeof e.getElementsByTagNam...
function y (line 1) | function y(e,t){for(var n=0,r=e.length;n<r;n++)Fe.set(e[n],"globalEval",...
function b (line 1) | function b(e,t,n,r,o){for(var i,a,s,u,l,c,f=t.createDocumentFragment(),p...
function x (line 1) | function x(){return!0}
function w (line 1) | function w(){return!1}
function C (line 1) | function C(){try{return te.activeElement}catch(e){}}
function T (line 1) | function T(e,t,n,r,o,i){var a,s;if("object"==typeof t){"string"!=typeof ...
function k (line 1) | function k(e,t){return de.nodeName(e,"table")&&de.nodeName(11!==t.nodeTy...
function j (line 1) | function j(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}
function E (line 1) | function E(e){var t=rt.exec(e.type);return t?e.type=t[1]:e.removeAttribu...
function N (line 1) | function N(e,t){var n,r,o,i,a,s,u,l;if(1===t.nodeType){if(Fe.hasData(e)&...
function S (line 1) | function S(e,t){var n=t.nodeName.toLowerCase();"input"===n&&ze.test(e.ty...
function A (line 1) | function A(e,t,r,o){t=oe.apply([],t);var i,a,s,u,l,c,f=0,p=e.length,h=p-...
function q (line 1) | function q(e,t,n){for(var r,o=t?de.filter(t,e):e,i=0;null!=(r=o[i]);i++)...
function D (line 1) | function D(e,t,n){var r,o,i,a,s=e.style;return n=n||st(e),n&&(a=n.getPro...
function O (line 1) | function O(e,t){return{get:function(){return e()?void delete this.get:(t...
function L (line 1) | function L(e){if(e in pt)return e;for(var t=e[0].toUpperCase()+e.slice(1...
function H (line 1) | function H(e,t,n){var r=$e.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3...
function F (line 1) | function F(e,t,n,r,o){var i,a=0;for(i=n===(r?"border":"content")?4:"widt...
function P (line 1) | function P(e,t,n){var r,o=!0,i=st(e),a="border-box"===de.css(e,"boxSizin...
function I (line 1) | function I(e,t,n,r,o){return new I.prototype.init(e,t,n,r,o)}
function R (line 1) | function R(){dt&&(e.requestAnimationFrame(R),de.fx.tick())}
function M (line 1) | function M(){return e.setTimeout(function(){ht=void 0}),ht=de.now()}
function $ (line 1) | function $(e,t){var n,r=0,o={height:e};for(t=t?1:0;r<4;r+=2-t)n=_e[r],o[...
function _ (line 1) | function _(e,t,n){for(var r,o=(U.tweeners[t]||[]).concat(U.tweeners["*"]...
function W (line 1) | function W(e,t,n){var r,o,i,a,s,u,l,c,f="width"in t||"height"in t,p=this...
function B (line 1) | function B(e,t){var n,r,o,i,a;for(n in e)if(r=de.camelCase(n),o=t[r],i=e...
function U (line 1) | function U(e,t,n){var r,o,i=0,a=U.prefilters.length,s=de.Deferred().alwa...
function z (line 1) | function z(e){var t=e.match(qe)||[];return t.join(" ")}
function X (line 1) | function X(e){return e.getAttribute&&e.getAttribute("class")||""}
function K (line 1) | function K(e,t,n,r){var o;if(de.isArray(t))de.each(t,function(t,o){n||Et...
function V (line 1) | function V(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r...
function G (line 1) | function G(e,t,n,r){function o(s){var u;return i[s]=!0,de.each(e[s]||[],...
function Y (line 1) | function Y(e,t){var n,r,o=de.ajaxSettings.flatOptions||{};for(n in t)voi...
function Q (line 1) | function Q(e,t,n){for(var r,o,i,a,s=e.contents,u=e.dataTypes;"*"===u[0];...
function J (line 1) | function J(e,t,n,r){var o,i,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for...
function Z (line 1) | function Z(e){return de.isWindow(e)?e:9===e.nodeType&&e.defaultView}
function t (line 1) | function t(e,t,n,r){var o,i,a,s,u,l,c,p=t&&t.ownerDocument,d=t?t.nodeTyp...
function n (line 1) | function n(){function e(n,r){return t.push(n+" ")>T.cacheLength&&delete ...
function r (line 1) | function r(e){return e[$]=!0,e}
function o (line 1) | function o(e){var t=L.createElement("fieldset");try{return!!e(t)}catch(e...
function i (line 1) | function i(e,t){for(var n=e.split("|"),r=n.length;r--;)T.attrHandle[n[r]...
function a (line 1) | function a(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.source...
function s (line 1) | function s(e){return function(t){var n=t.nodeName.toLowerCase();return"i...
function u (line 1) | function u(e){return function(t){var n=t.nodeName.toLowerCase();return("...
function l (line 1) | function l(e){return function(t){return"form"in t?t.parentNode&&t.disabl...
function c (line 1) | function c(e){return r(function(t){return t=+t,r(function(n,r){for(var o...
function f (line 1) | function f(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}
function p (line 1) | function p(){}
function h (line 1) | function h(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}
function d (line 1) | function d(e,t,n){var r=t.dir,o=t.next,i=o||r,a=n&&"parentNode"===i,s=B+...
function g (line 1) | function g(e){return e.length>1?function(t,n,r){for(var o=e.length;o--;)...
function m (line 1) | function m(e,n,r){for(var o=0,i=n.length;o<i;o++)t(e,n[o],r);return r}
function v (line 1) | function v(e,t,n,r,o){for(var i,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(i...
function y (line 1) | function y(e,t,n,o,i,a){return o&&!o[$]&&(o=y(o)),i&&!i[$]&&(i=y(i,a)),r...
function b (line 1) | function b(e){for(var t,n,r,o=e.length,i=T.relative[e[0].type],a=i||T.re...
function x (line 1) | function x(e,n){var o=n.length>0,i=e.length>0,a=function(r,a,s,u,l){var ...
function i (line 2) | function i(t,n,r,o){return function(){var l=this,c=arguments,f=function(...
function t (line 2) | function t(){if(s){s.style.cssText="box-sizing:border-box;position:relat...
function r (line 3) | function r(t,n,r,s){var l,p,h,x,w,C=n;c||(c=!0,u&&e.clearTimeout(u),o=vo...
function o (line 3) | function o(e,t,n){return e.addEventListener?void e.addEventListener(t,n,...
function i (line 3) | function i(e){if("keypress"==e.type){var t=String.fromCharCode(e.which);...
function a (line 3) | function a(e,t){return e.sort().join(",")===t.sort().join(",")}
function s (line 3) | function s(e){var t=[];return e.shiftKey&&t.push("shift"),e.altKey&&t.pu...
function u (line 3) | function u(e){return e.preventDefault?void e.preventDefault():void(e.ret...
function l (line 3) | function l(e){return e.stopPropagation?void e.stopPropagation():void(e.c...
function c (line 3) | function c(e){return"shift"==e||"ctrl"==e||"alt"==e||"meta"==e}
function f (line 3) | function f(){if(!v){v={};for(var e in y)e>95&&e<112||y.hasOwnProperty(e)...
function p (line 3) | function p(e,t,n){return n||(n=f()[e]?"keydown":"keypress"),"keypress"==...
function h (line 3) | function h(e){return"+"===e?["+"]:(e=e.replace(/\+{2}/g,"+plus"),e.split...
function d (line 3) | function d(e,t){var n,r,o,i=[];for(n=h(e),o=0;o<n.length;++o)r=n[o],w[r]...
function g (line 3) | function g(e,t){return null!==e&&e!==n&&(e===t||g(e.parentNode,t))}
function m (line 3) | function m(e){function t(e){e=e||{};var t,n=!1;for(t in x)e[t]?n=!0:x[t]...
function o (line 3) | function o(e){throw new RangeError(L[e])}
function i (line 3) | function i(e,t){for(var n=e.length,r=[];n--;)r[n]=t(e[n]);return r}
function a (line 3) | function a(e,t){var n=e.split("@"),r="";n.length>1&&(r=n[0]+"@",e=n[1]),...
function s (line 3) | function s(e){for(var t,n,r=[],o=0,i=e.length;o<i;)t=e.charCodeAt(o++),t...
function u (line 3) | function u(e){return i(e,function(e){var t="";return e>65535&&(e-=65536,...
function l (line 3) | function l(e){return e-48<10?e-22:e-65<26?e-65:e-97<26?e-97:C}
function c (line 3) | function c(e,t){return e+22+75*(e<26)-((0!=t)<<5)}
function f (line 3) | function f(e,t,n){var r=0;for(e=n?F(e/E):e>>1,e+=F(e/t);e>H*k>>1;r+=C)e=...
function p (line 3) | function p(e){var t,n,r,i,a,s,c,p,h,d,g=[],m=e.length,v=0,y=S,b=N;for(n=...
function h (line 3) | function h(e){var t,n,r,i,a,u,l,p,h,d,g,m,v,y,b,x=[];for(e=s(e),m=e.leng...
function d (line 3) | function d(e){return a(e,function(e){return q.test(e)?p(e.slice(4).toLow...
function g (line 3) | function g(e){return a(e,function(e){return D.test(e)?"xn--"+h(e):e})}
function r (line 3) | function r(e,t){return Object.prototype.hasOwnProperty.call(e,t)}
function r (line 4) | function r(e,t){if(e.map)return e.map(t);for(var n=[],r=0;r<e.length;r++...
function r (line 4) | function r(){this.protocol=null,this.slashes=null,this.auth=null,this.ho...
function o (line 4) | function o(e,t,n){if(e&&l.isObject(e)&&e instanceof r)return e;var o=new...
function i (line 4) | function i(e){return l.isString(e)&&(e=o(e)),e instanceof r?e.format():r...
function a (line 4) | function a(e,t){return o(e,!1,!0).resolve(t)}
function s (line 4) | function s(e,t){return e?o(e,!1,!0).resolveObject(t):t}
function r (line 4) | function r(e){var t=a(e.currentTarget).parent().find(".dropdown-menu");t...
function o (line 4) | function o(e){a(".dropdown-menu").removeClass("open")}
function i (line 4) | function i(){a(document).on("click",".toggle-dropdown",r),a(document).on...
function r (line 4) | function r(){s.init(),i.init(),o.init(),a.init(),u.createButton({index:0...
function r (line 4) | function r(e,t){i.bind(e,function(e){return t(),!1})}
function o (line 4) | function o(){r(["right"],function(e){a.goNext()}),r(["left"],function(e)...
function r (line 4) | function r(e){return o.state.$book.addClass("is-loading"),e.always(funct...
function r (line 4) | function r(){return T(E.isSmallScreen()?".book-body":".body-inner")}
function o (line 4) | function o(e){var t=r(),n=0;i(e)&&(e&&(n=u(e)),t.unbind("scroll"),t.anim...
function i (line 4) | function i(e){var t=r(),n=t.find(e);return!!n.length}
function a (line 4) | function a(e){return 0===e.length}
function s (line 4) | function s(e,t){return e.length>0&&e.filter(t).length>0}
function u (line 4) | function u(e){var t=r(),n=t.find(".page-inner"),o=t.find(e),i=o.offsetPa...
function l (line 4) | function l(e,t){if(e||t||(e=w.first()),t&&(e=w.length>1?w.filter(functio...
function c (line 4) | function c(e){var t=e.children("a"),n=t.attr("href").split("#")[1];retur...
function f (line 4) | function f(){var e=r(),t=e.scrollTop(),n=e.prop("scrollHeight"),o=e.prop...
function p (line 4) | function p(e,t){var n=k.parse(A),r=k.resolve(window.location.pathname,e)...
function h (line 4) | function h(){var e,t;e=parseInt(T(".body-inner").css("width"),10),t=pars...
function d (line 4) | function d(e){var t=T(".book-body"),n=t.find(".body-inner"),o=n.find(".p...
function g (line 4) | function g(e){return 0===e.button}
function m (line 4) | function m(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}
function v (line 4) | function v(e){var t=T(this),n=t.attr("target");if(!m(e)&&g(e)&&!n){e.sto...
function y (line 4) | function y(){var e=T(".navigation-next").attr("href");e&&p(e,!0)}
function b (line 4) | function b(){var e=T(".navigation-prev").attr("href");e&&p(e,!0)}
function x (line 4) | function x(){T.ajaxSetup({cache:!1}),history.replaceState({path:window.l...
function r (line 4) | function r(e,t){null!=l.state&&o()==e||(null==t&&(t=!0),l.state.$book.to...
function o (line 4) | function o(){return l.state.$book.hasClass("with-summary")}
function i (line 4) | function i(){u.isMobile()||r(l.storage.get("sidebar",!0),!1),s(document)...
function a (line 4) | function a(e){var t=s(".book-summary");t.find("li").each(function(){var ...
function r (line 4) | function r(){return"btn-"+g++}
function o (line 4) | function o(e,t,n,r){var o=e.children(t).length;n<0&&(n=Math.max(0,o+1+n)...
function i (line 4) | function i(e){e.preventDefault()}
function a (line 4) | function a(e){var t=p("<div>",{class:"dropdown-menu",html:'<div class="d...
function s (line 4) | function s(e){return e=p.extend({label:"",icon:"",text:"",position:"left...
function u (line 4) | function u(e){var t,n=p(".book-header"),r=n.find("h1"),i="pull-"+e.posit...
function l (line 4) | function l(){p(".js-toolbar-action").remove(),d.forEach(u)}
function c (line 4) | function c(e){d=p.grep(d,function(t){return t.id!=e}),l()}
function f (line 4) | function f(e){d=p.grep(d,function(t){return e.indexOf(t.id)==-1}),l()}
FILE: vi/gitbook/gitbook.js
function o (line 1) | function o(s,a){if(!n[s]){if(!t[s]){var u="function"==typeof require&&re...
function n (line 1) | function n(e,t){t=t||te;var n=t.createElement("script");n.text=e,t.head....
function r (line 1) | function r(e){var t=!!e&&"length"in e&&e.length,n=de.type(e);return"func...
function o (line 1) | function o(e,t,n){return de.isFunction(t)?de.grep(e,function(e,r){return...
function i (line 1) | function i(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}
function s (line 1) | function s(e){var t={};return de.each(e.match(qe)||[],function(e,n){t[n]...
function a (line 1) | function a(e){return e}
function u (line 1) | function u(e){throw e}
function c (line 1) | function c(e,t,n){var r;try{e&&de.isFunction(r=e.promise)?r.call(e).done...
function l (line 1) | function l(){te.removeEventListener("DOMContentLoaded",l),e.removeEventL...
function f (line 1) | function f(){this.expando=de.expando+f.uid++}
function p (line 1) | function p(e){return"true"===e||"false"!==e&&("null"===e?null:e===+e+""?...
function h (line 1) | function h(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.rep...
function d (line 1) | function d(e,t,n,r){var o,i=1,s=20,a=r?function(){return r.cur()}:functi...
function g (line 1) | function g(e){var t,n=e.ownerDocument,r=e.nodeName,o=Ue[r];return o?o:(t...
function m (line 1) | function m(e,t){for(var n,r,o=[],i=0,s=e.length;i<s;i++)r=e[i],r.style&&...
function v (line 1) | function v(e,t){var n;return n="undefined"!=typeof e.getElementsByTagNam...
function y (line 1) | function y(e,t){for(var n=0,r=e.length;n<r;n++)Fe.set(e[n],"globalEval",...
function x (line 1) | function x(e,t,n,r,o){for(var i,s,a,u,c,l,f=t.createDocumentFragment(),p...
function b (line 1) | function b(){return!0}
function w (line 1) | function w(){return!1}
function T (line 1) | function T(){try{return te.activeElement}catch(e){}}
function C (line 1) | function C(e,t,n,r,o,i){var s,a;if("object"==typeof t){"string"!=typeof ...
function j (line 1) | function j(e,t){return de.nodeName(e,"table")&&de.nodeName(11!==t.nodeTy...
function k (line 1) | function k(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}
function E (line 1) | function E(e){var t=rt.exec(e.type);return t?e.type=t[1]:e.removeAttribu...
function S (line 1) | function S(e,t){var n,r,o,i,s,a,u,c;if(1===t.nodeType){if(Fe.hasData(e)&...
function N (line 1) | function N(e,t){var n=t.nodeName.toLowerCase();"input"===n&&ze.test(e.ty...
function A (line 1) | function A(e,t,r,o){t=oe.apply([],t);var i,s,a,u,c,l,f=0,p=e.length,h=p-...
function q (line 1) | function q(e,t,n){for(var r,o=t?de.filter(t,e):e,i=0;null!=(r=o[i]);i++)...
function D (line 1) | function D(e,t,n){var r,o,i,s,a=e.style;return n=n||at(e),n&&(s=n.getPro...
function O (line 1) | function O(e,t){return{get:function(){return e()?void delete this.get:(t...
function L (line 1) | function L(e){if(e in pt)return e;for(var t=e[0].toUpperCase()+e.slice(1...
function H (line 1) | function H(e,t,n){var r=$e.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3...
function F (line 1) | function F(e,t,n,r,o){var i,s=0;for(i=n===(r?"border":"content")?4:"widt...
function R (line 1) | function R(e,t,n){var r,o=!0,i=at(e),s="border-box"===de.css(e,"boxSizin...
function I (line 1) | function I(e,t,n,r,o){return new I.prototype.init(e,t,n,r,o)}
function P (line 1) | function P(){dt&&(e.requestAnimationFrame(P),de.fx.tick())}
function M (line 1) | function M(){return e.setTimeout(function(){ht=void 0}),ht=de.now()}
function $ (line 1) | function $(e,t){var n,r=0,o={height:e};for(t=t?1:0;r<4;r+=2-t)n=We[r],o[...
function W (line 1) | function W(e,t,n){for(var r,o=(U.tweeners[t]||[]).concat(U.tweeners["*"]...
function B (line 1) | function B(e,t,n){var r,o,i,s,a,u,c,l,f="width"in t||"height"in t,p=this...
function _ (line 1) | function _(e,t){var n,r,o,i,s;for(n in e)if(r=de.camelCase(n),o=t[r],i=e...
function U (line 1) | function U(e,t,n){var r,o,i=0,s=U.prefilters.length,a=de.Deferred().alwa...
function z (line 1) | function z(e){var t=e.match(qe)||[];return t.join(" ")}
function X (line 1) | function X(e){return e.getAttribute&&e.getAttribute("class")||""}
function V (line 1) | function V(e,t,n,r){var o;if(de.isArray(t))de.each(t,function(t,o){n||Et...
function G (line 1) | function G(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r...
function Y (line 1) | function Y(e,t,n,r){function o(a){var u;return i[a]=!0,de.each(e[a]||[],...
function Q (line 1) | function Q(e,t){var n,r,o=de.ajaxSettings.flatOptions||{};for(n in t)voi...
function J (line 1) | function J(e,t,n){for(var r,o,i,s,a=e.contents,u=e.dataTypes;"*"===u[0];...
function K (line 1) | function K(e,t,n,r){var o,i,s,a,u,c={},l=e.dataTypes.slice();if(l[1])for...
function Z (line 1) | function Z(e){return de.isWindow(e)?e:9===e.nodeType&&e.defaultView}
function t (line 1) | function t(e,t,n,r){var o,i,s,a,u,c,l,p=t&&t.ownerDocument,d=t?t.nodeTyp...
function n (line 1) | function n(){function e(n,r){return t.push(n+" ")>C.cacheLength&&delete ...
function r (line 1) | function r(e){return e[$]=!0,e}
function o (line 1) | function o(e){var t=L.createElement("fieldset");try{return!!e(t)}catch(e...
function i (line 1) | function i(e,t){for(var n=e.split("|"),r=n.length;r--;)C.attrHandle[n[r]...
function s (line 1) | function s(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.source...
function a (line 1) | function a(e){return function(t){var n=t.nodeName.toLowerCase();return"i...
function u (line 1) | function u(e){return function(t){var n=t.nodeName.toLowerCase();return("...
function c (line 1) | function c(e){return function(t){return"form"in t?t.parentNode&&t.disabl...
function l (line 1) | function l(e){return r(function(t){return t=+t,r(function(n,r){for(var o...
function f (line 1) | function f(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}
function p (line 1) | function p(){}
function h (line 1) | function h(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}
function d (line 1) | function d(e,t,n){var r=t.dir,o=t.next,i=o||r,s=n&&"parentNode"===i,a=_+...
function g (line 1) | function g(e){return e.length>1?function(t,n,r){for(var o=e.length;o--;)...
function m (line 1) | function m(e,n,r){for(var o=0,i=n.length;o<i;o++)t(e,n[o],r);return r}
function v (line 1) | function v(e,t,n,r,o){for(var i,s=[],a=0,u=e.length,c=null!=t;a<u;a++)(i...
function y (line 1) | function y(e,t,n,o,i,s){return o&&!o[$]&&(o=y(o)),i&&!i[$]&&(i=y(i,s)),r...
function x (line 1) | function x(e){for(var t,n,r,o=e.length,i=C.relative[e[0].type],s=i||C.re...
function b (line 1) | function b(e,n){var o=n.length>0,i=e.length>0,s=function(r,s,a,u,c){var ...
function i (line 2) | function i(t,n,r,o){return function(){var c=this,l=arguments,f=function(...
function t (line 2) | function t(){if(a){a.style.cssText="box-sizing:border-box;position:relat...
function r (line 3) | function r(t,n,r,a){var c,p,h,b,w,T=n;l||(l=!0,u&&e.clearTimeout(u),o=vo...
function t (line 3) | function t(e,t){for(var n=0,r=e.length-1;r>=0;r--){var o=e[r];"."===o?e....
function r (line 3) | function r(e,t){if(e.filter)return e.filter(t);for(var n=[],r=0;r<e.leng...
function r (line 3) | function r(e){for(var t=0;t<e.length&&""===e[t];t++);for(var n=e.length-...
function r (line 3) | function r(){throw new Error("setTimeout has not been defined")}
function o (line 3) | function o(){throw new Error("clearTimeout has not been defined")}
function i (line 3) | function i(e){if(f===setTimeout)return setTimeout(e,0);if((f===r||!f)&&s...
function s (line 3) | function s(e){if(p===clearTimeout)return clearTimeout(e);if((p===o||!p)&...
function a (line 3) | function a(){m&&d&&(m=!1,d.length?g=d.concat(g):v=-1,g.length&&u())}
function u (line 3) | function u(){if(!m){var e=i(a);m=!0;for(var t=g.length;t;){for(d=g,g=[];...
function c (line 3) | function c(e,t){this.fun=e,this.array=t}
function l (line 3) | function l(){}
function o (line 3) | function o(e){throw new RangeError(L[e])}
function i (line 3) | function i(e,t){for(var n=e.length,r=[];n--;)r[n]=t(e[n]);return r}
function s (line 3) | function s(e,t){var n=e.split("@"),r="";n.length>1&&(r=n[0]+"@",e=n[1]),...
function a (line 3) | function a(e){for(var t,n,r=[],o=0,i=e.length;o<i;)t=e.charCodeAt(o++),t...
function u (line 3) | function u(e){return i(e,function(e){var t="";return e>65535&&(e-=65536,...
function c (line 3) | function c(e){return e-48<10?e-22:e-65<26?e-65:e-97<26?e-97:T}
function l (line 3) | function l(e,t){return e+22+75*(e<26)-((0!=t)<<5)}
function f (line 3) | function f(e,t,n){var r=0;for(e=n?F(e/E):e>>1,e+=F(e/t);e>H*j>>1;r+=T)e=...
function p (line 3) | function p(e){var t,n,r,i,s,a,l,p,h,d,g=[],m=e.length,v=0,y=N,x=S;for(n=...
function h (line 3) | function h(e){var t,n,r,i,s,u,c,p,h,d,g,m,v,y,x,b=[];for(e=a(e),m=e.leng...
function d (line 3) | function d(e){return s(e,function(e){return q.test(e)?p(e.slice(4).toLow...
function g (line 3) | function g(e){return s(e,function(e){return D.test(e)?"xn--"+h(e):e})}
function r (line 3) | function r(e,t){return Object.prototype.hasOwnProperty.call(e,t)}
function r (line 3) | function r(e,t){if(e.map)return e.map(t);for(var n=[],r=0;r<e.length;r++...
function r (line 3) | function r(){this.protocol=null,this.slashes=null,this.auth=null,this.ho...
function o (line 3) | function o(e,t,n){
function i (line 4) | function i(e){return c.isString(e)&&(e=o(e)),e instanceof r?e.format():r...
function s (line 4) | function s(e,t){return o(e,!1,!0).resolve(t)}
function a (line 4) | function a(e,t){return e?o(e,!1,!0).resolveObject(t):t}
function r (line 4) | function r(e){console.log("page has changed",e),o(e),l||(l=!0,c.trigger(...
function o (line 4) | function o(e){f.page=e.page,f.file=e.file,f.gitbook=e.gitbook,f.config=e...
function i (line 4) | function i(){return f}
FILE: vi/gitbook/theme.js
function o (line 1) | function o(a,s){if(!n[a]){if(!t[a]){var u="function"==typeof require&&re...
function n (line 1) | function n(e,t){t=t||te;var n=t.createElement("script");n.text=e,t.head....
function r (line 1) | function r(e){var t=!!e&&"length"in e&&e.length,n=de.type(e);return"func...
function o (line 1) | function o(e,t,n){return de.isFunction(t)?de.grep(e,function(e,r){return...
function i (line 1) | function i(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}
function a (line 1) | function a(e){var t={};return de.each(e.match(qe)||[],function(e,n){t[n]...
function s (line 1) | function s(e){return e}
function u (line 1) | function u(e){throw e}
function l (line 1) | function l(e,t,n){var r;try{e&&de.isFunction(r=e.promise)?r.call(e).done...
function c (line 1) | function c(){te.removeEventListener("DOMContentLoaded",c),e.removeEventL...
function f (line 1) | function f(){this.expando=de.expando+f.uid++}
function p (line 1) | function p(e){return"true"===e||"false"!==e&&("null"===e?null:e===+e+""?...
function h (line 1) | function h(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.rep...
function d (line 1) | function d(e,t,n,r){var o,i=1,a=20,s=r?function(){return r.cur()}:functi...
function g (line 1) | function g(e){var t,n=e.ownerDocument,r=e.nodeName,o=Ue[r];return o?o:(t...
function m (line 1) | function m(e,t){for(var n,r,o=[],i=0,a=e.length;i<a;i++)r=e[i],r.style&&...
function v (line 1) | function v(e,t){var n;return n="undefined"!=typeof e.getElementsByTagNam...
function y (line 1) | function y(e,t){for(var n=0,r=e.length;n<r;n++)Fe.set(e[n],"globalEval",...
function b (line 1) | function b(e,t,n,r,o){for(var i,a,s,u,l,c,f=t.createDocumentFragment(),p...
function x (line 1) | function x(){return!0}
function w (line 1) | function w(){return!1}
function C (line 1) | function C(){try{return te.activeElement}catch(e){}}
function T (line 1) | function T(e,t,n,r,o,i){var a,s;if("object"==typeof t){"string"!=typeof ...
function k (line 1) | function k(e,t){return de.nodeName(e,"table")&&de.nodeName(11!==t.nodeTy...
function j (line 1) | function j(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}
function E (line 1) | function E(e){var t=rt.exec(e.type);return t?e.type=t[1]:e.removeAttribu...
function N (line 1) | function N(e,t){var n,r,o,i,a,s,u,l;if(1===t.nodeType){if(Fe.hasData(e)&...
function S (line 1) | function S(e,t){var n=t.nodeName.toLowerCase();"input"===n&&ze.test(e.ty...
function A (line 1) | function A(e,t,r,o){t=oe.apply([],t);var i,a,s,u,l,c,f=0,p=e.length,h=p-...
function q (line 1) | function q(e,t,n){for(var r,o=t?de.filter(t,e):e,i=0;null!=(r=o[i]);i++)...
function D (line 1) | function D(e,t,n){var r,o,i,a,s=e.style;return n=n||st(e),n&&(a=n.getPro...
function O (line 1) | function O(e,t){return{get:function(){return e()?void delete this.get:(t...
function L (line 1) | function L(e){if(e in pt)return e;for(var t=e[0].toUpperCase()+e.slice(1...
function H (line 1) | function H(e,t,n){var r=$e.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3...
function F (line 1) | function F(e,t,n,r,o){var i,a=0;for(i=n===(r?"border":"content")?4:"widt...
function P (line 1) | function P(e,t,n){var r,o=!0,i=st(e),a="border-box"===de.css(e,"boxSizin...
function I (line 1) | function I(e,t,n,r,o){return new I.prototype.init(e,t,n,r,o)}
function R (line 1) | function R(){dt&&(e.requestAnimationFrame(R),de.fx.tick())}
function M (line 1) | function M(){return e.setTimeout(function(){ht=void 0}),ht=de.now()}
function $ (line 1) | function $(e,t){var n,r=0,o={height:e};for(t=t?1:0;r<4;r+=2-t)n=_e[r],o[...
function _ (line 1) | function _(e,t,n){for(var r,o=(U.tweeners[t]||[]).concat(U.tweeners["*"]...
function W (line 1) | function W(e,t,n){var r,o,i,a,s,u,l,c,f="width"in t||"height"in t,p=this...
function B (line 1) | function B(e,t){var n,r,o,i,a;for(n in e)if(r=de.camelCase(n),o=t[r],i=e...
function U (line 1) | function U(e,t,n){var r,o,i=0,a=U.prefilters.length,s=de.Deferred().alwa...
function z (line 1) | function z(e){var t=e.match(qe)||[];return t.join(" ")}
function X (line 1) | function X(e){return e.getAttribute&&e.getAttribute("class")||""}
function K (line 1) | function K(e,t,n,r){var o;if(de.isArray(t))de.each(t,function(t,o){n||Et...
function V (line 1) | function V(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r...
function G (line 1) | function G(e,t,n,r){function o(s){var u;return i[s]=!0,de.each(e[s]||[],...
function Y (line 1) | function Y(e,t){var n,r,o=de.ajaxSettings.flatOptions||{};for(n in t)voi...
function Q (line 1) | function Q(e,t,n){for(var r,o,i,a,s=e.contents,u=e.dataTypes;"*"===u[0];...
function J (line 1) | function J(e,t,n,r){var o,i,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for...
function Z (line 1) | function Z(e){return de.isWindow(e)?e:9===e.nodeType&&e.defaultView}
function t (line 1) | function t(e,t,n,r){var o,i,a,s,u,l,c,p=t&&t.ownerDocument,d=t?t.nodeTyp...
function n (line 1) | function n(){function e(n,r){return t.push(n+" ")>T.cacheLength&&delete ...
function r (line 1) | function r(e){return e[$]=!0,e}
function o (line 1) | function o(e){var t=L.createElement("fieldset");try{return!!e(t)}catch(e...
function i (line 1) | function i(e,t){for(var n=e.split("|"),r=n.length;r--;)T.attrHandle[n[r]...
function a (line 1) | function a(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.source...
function s (line 1) | function s(e){return function(t){var n=t.nodeName.toLowerCase();return"i...
function u (line 1) | function u(e){return function(t){var n=t.nodeName.toLowerCase();return("...
function l (line 1) | function l(e){return function(t){return"form"in t?t.parentNode&&t.disabl...
function c (line 1) | function c(e){return r(function(t){return t=+t,r(function(n,r){for(var o...
function f (line 1) | function f(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}
function p (line 1) | function p(){}
function h (line 1) | function h(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}
function d (line 1) | function d(e,t,n){var r=t.dir,o=t.next,i=o||r,a=n&&"parentNode"===i,s=B+...
function g (line 1) | function g(e){return e.length>1?function(t,n,r){for(var o=e.length;o--;)...
function m (line 1) | function m(e,n,r){for(var o=0,i=n.length;o<i;o++)t(e,n[o],r);return r}
function v (line 1) | function v(e,t,n,r,o){for(var i,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(i...
function y (line 1) | function y(e,t,n,o,i,a){return o&&!o[$]&&(o=y(o)),i&&!i[$]&&(i=y(i,a)),r...
function b (line 1) | function b(e){for(var t,n,r,o=e.length,i=T.relative[e[0].type],a=i||T.re...
function x (line 1) | function x(e,n){var o=n.length>0,i=e.length>0,a=function(r,a,s,u,l){var ...
function i (line 2) | function i(t,n,r,o){return function(){var l=this,c=arguments,f=function(...
function t (line 2) | function t(){if(s){s.style.cssText="box-sizing:border-box;position:relat...
function r (line 3) | function r(t,n,r,s){var l,p,h,x,w,C=n;c||(c=!0,u&&e.clearTimeout(u),o=vo...
function o (line 3) | function o(e,t,n){return e.addEventListener?void e.addEventListener(t,n,...
function i (line 3) | function i(e){if("keypress"==e.type){var t=String.fromCharCode(e.which);...
function a (line 3) | function a(e,t){return e.sort().join(",")===t.sort().join(",")}
function s (line 3) | function s(e){var t=[];return e.shiftKey&&t.push("shift"),e.altKey&&t.pu...
function u (line 3) | function u(e){return e.preventDefault?void e.preventDefault():void(e.ret...
function l (line 3) | function l(e){return e.stopPropagation?void e.stopPropagation():void(e.c...
function c (line 3) | function c(e){return"shift"==e||"ctrl"==e||"alt"==e||"meta"==e}
function f (line 3) | function f(){if(!v){v={};for(var e in y)e>95&&e<112||y.hasOwnProperty(e)...
function p (line 3) | function p(e,t,n){return n||(n=f()[e]?"keydown":"keypress"),"keypress"==...
function h (line 3) | function h(e){return"+"===e?["+"]:(e=e.replace(/\+{2}/g,"+plus"),e.split...
function d (line 3) | function d(e,t){var n,r,o,i=[];for(n=h(e),o=0;o<n.length;++o)r=n[o],w[r]...
function g (line 3) | function g(e,t){return null!==e&&e!==n&&(e===t||g(e.parentNode,t))}
function m (line 3) | function m(e){function t(e){e=e||{};var t,n=!1;for(t in x)e[t]?n=!0:x[t]...
function o (line 3) | function o(e){throw new RangeError(L[e])}
function i (line 3) | function i(e,t){for(var n=e.length,r=[];n--;)r[n]=t(e[n]);return r}
function a (line 3) | function a(e,t){var n=e.split("@"),r="";n.length>1&&(r=n[0]+"@",e=n[1]),...
function s (line 3) | function s(e){for(var t,n,r=[],o=0,i=e.length;o<i;)t=e.charCodeAt(o++),t...
function u (line 3) | function u(e){return i(e,function(e){var t="";return e>65535&&(e-=65536,...
function l (line 3) | function l(e){return e-48<10?e-22:e-65<26?e-65:e-97<26?e-97:C}
function c (line 3) | function c(e,t){return e+22+75*(e<26)-((0!=t)<<5)}
function f (line 3) | function f(e,t,n){var r=0;for(e=n?F(e/E):e>>1,e+=F(e/t);e>H*k>>1;r+=C)e=...
function p (line 3) | function p(e){var t,n,r,i,a,s,c,p,h,d,g=[],m=e.length,v=0,y=S,b=N;for(n=...
function h (line 3) | function h(e){var t,n,r,i,a,u,l,p,h,d,g,m,v,y,b,x=[];for(e=s(e),m=e.leng...
function d (line 3) | function d(e){return a(e,function(e){return q.test(e)?p(e.slice(4).toLow...
function g (line 3) | function g(e){return a(e,function(e){return D.test(e)?"xn--"+h(e):e})}
function r (line 3) | function r(e,t){return Object.prototype.hasOwnProperty.call(e,t)}
function r (line 4) | function r(e,t){if(e.map)return e.map(t);for(var n=[],r=0;r<e.length;r++...
function r (line 4) | function r(){this.protocol=null,this.slashes=null,this.auth=null,this.ho...
function o (line 4) | function o(e,t,n){if(e&&l.isObject(e)&&e instanceof r)return e;var o=new...
function i (line 4) | function i(e){return l.isString(e)&&(e=o(e)),e instanceof r?e.format():r...
function a (line 4) | function a(e,t){return o(e,!1,!0).resolve(t)}
function s (line 4) | function s(e,t){return e?o(e,!1,!0).resolveObject(t):t}
function r (line 4) | function r(e){var t=a(e.currentTarget).parent().find(".dropdown-menu");t...
function o (line 4) | function o(e){a(".dropdown-menu").removeClass("open")}
function i (line 4) | function i(){a(document).on("click",".toggle-dropdown",r),a(document).on...
function r (line 4) | function r(){s.init(),i.init(),o.init(),a.init(),u.createButton({index:0...
function r (line 4) | function r(e,t){i.bind(e,function(e){return t(),!1})}
function o (line 4) | function o(){r(["right"],function(e){a.goNext()}),r(["left"],function(e)...
function r (line 4) | function r(e){return o.state.$book.addClass("is-loading"),e.always(funct...
function r (line 4) | function r(){return T(E.isSmallScreen()?".book-body":".body-inner")}
function o (line 4) | function o(e){var t=r(),n=0;i(e)&&(e&&(n=u(e)),t.unbind("scroll"),t.anim...
function i (line 4) | function i(e){var t=r(),n=t.find(e);return!!n.length}
function a (line 4) | function a(e){return 0===e.length}
function s (line 4) | function s(e,t){return e.length>0&&e.filter(t).length>0}
function u (line 4) | function u(e){var t=r(),n=t.find(".page-inner"),o=t.find(e),i=o.offsetPa...
function l (line 4) | function l(e,t){if(e||t||(e=w.first()),t&&(e=w.length>1?w.filter(functio...
function c (line 4) | function c(e){var t=e.children("a"),n=t.attr("href").split("#")[1];retur...
function f (line 4) | function f(){var e=r(),t=e.scrollTop(),n=e.prop("scrollHeight"),o=e.prop...
function p (line 4) | function p(e,t){var n=k.parse(A),r=k.resolve(window.location.pathname,e)...
function h (line 4) | function h(){var e,t;e=parseInt(T(".body-inner").css("width"),10),t=pars...
function d (line 4) | function d(e){var t=T(".book-body"),n=t.find(".body-inner"),o=n.find(".p...
function g (line 4) | function g(e){return 0===e.button}
function m (line 4) | function m(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}
function v (line 4) | function v(e){var t=T(this),n=t.attr("target");if(!m(e)&&g(e)&&!n){e.sto...
function y (line 4) | function y(){var e=T(".navigation-next").attr("href");e&&p(e,!0)}
function b (line 4) | function b(){var e=T(".navigation-prev").attr("href");e&&p(e,!0)}
function x (line 4) | function x(){T.ajaxSetup({cache:!1}),history.replaceState({path:window.l...
function r (line 4) | function r(e,t){null!=l.state&&o()==e||(null==t&&(t=!0),l.state.$book.to...
function o (line 4) | function o(){return l.state.$book.hasClass("with-summary")}
function i (line 4) | function i(){u.isMobile()||r(l.storage.get("sidebar",!0),!1),s(document)...
function a (line 4) | function a(e){var t=s(".book-summary");t.find("li").each(function(){var ...
function r (line 4) | function r(){return"btn-"+g++}
function o (line 4) | function o(e,t,n,r){var o=e.children(t).length;n<0&&(n=Math.max(0,o+1+n)...
function i (line 4) | function i(e){e.preventDefault()}
function a (line 4) | function a(e){var t=p("<div>",{class:"dropdown-menu",html:'<div class="d...
function s (line 4) | function s(e){return e=p.extend({label:"",icon:"",text:"",position:"left...
function u (line 4) | function u(e){var t,n=p(".book-header"),r=n.find("h1"),i="pull-"+e.posit...
function l (line 4) | function l(){p(".js-toolbar-action").remove(),d.forEach(u)}
function c (line 4) | function c(e){d=p.grep(d,function(t){return t.id!=e}),l()}
function f (line 4) | function f(e){d=p.grep(d,function(t){return e.indexOf(t.id)==-1}),l()}
Copy disabled (too large)
Download .json
Condensed preview — 476 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (10,428K chars).
[
{
"path": ".gitignore",
"chars": 11,
"preview": ".git\n.cache"
},
{
"path": "CNAME",
"chars": 13,
"preview": "www.v2ray.com"
},
{
"path": "awesome/ads.html",
"chars": 31120,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"zh\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "awesome/tools.html",
"chars": 32729,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"zh\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "chapter_00/01_versions.html",
"chars": 72975,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"zh\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "chapter_00/02_donate.html",
"chars": 29753,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"zh\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "chapter_00/command.html",
"chars": 33969,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"zh\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "chapter_00/faq.html",
"chars": 35653,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"zh\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "chapter_00/help.html",
"chars": 34471,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"zh\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "chapter_00/install.html",
"chars": 35131,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"zh\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "chapter_00/start.html",
"chars": 34272,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"zh\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "chapter_00/workflow.html",
"chars": 28257,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"zh\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "chapter_02/01_overview.html",
"chars": 52851,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"zh\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "chapter_02/02_protocols.html",
"chars": 23318,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"zh\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "chapter_02/03_routing.html",
"chars": 47804,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"zh\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "chapter_02/04_dns.html",
"chars": 39721,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"zh\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "chapter_02/05_transport.html",
"chars": 54747,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"zh\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "chapter_02/api.html",
"chars": 26800,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"zh\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "chapter_02/env.html",
"chars": 27223,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"zh\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "chapter_02/index.html",
"chars": 31777,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"zh\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "chapter_02/mux.html",
"chars": 25359,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"zh\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "chapter_02/policy.html",
"chars": 35238,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"zh\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "chapter_02/protocols/blackhole.html",
"chars": 27039,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"zh\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "chapter_02/protocols/dns.html",
"chars": 25911,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"zh\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "chapter_02/protocols/dokodemo.html",
"chars": 30841,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"zh\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "chapter_02/protocols/freedom.html",
"chars": 26985,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"zh\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "chapter_02/protocols/http.html",
"chars": 34119,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"zh\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "chapter_02/protocols/mtproto.html",
"chars": 30650,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"zh\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "chapter_02/protocols/shadowsocks.html",
"chars": 34273,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"zh\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "chapter_02/protocols/socks.html",
"chars": 34742,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"zh\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "chapter_02/protocols/vmess.html",
"chars": 39396,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"zh\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "chapter_02/reverse.html",
"chars": 45845,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"zh\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "chapter_02/stats.html",
"chars": 25638,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"zh\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "chapter_02/transport/domainsocket.html",
"chars": 25307,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"zh\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "chapter_02/transport/h2.html",
"chars": 25961,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"zh\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "chapter_02/transport/mkcp.html",
"chars": 37414,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"zh\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "chapter_02/transport/quic.html",
"chars": 29762,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"zh\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "chapter_02/transport/tcp.html",
"chars": 34327,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"zh\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "chapter_02/transport/websocket.html",
"chars": 25143,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"zh\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "core/index.html",
"chars": 635,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset='utf-8'>\n <meta name=\"go-import\" content=\"v2ray.com/core "
},
{
"path": "developer/index.html",
"chars": 29326,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"zh\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "developer/intro/compile.html",
"chars": 36217,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"zh\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "developer/intro/design.html",
"chars": 27249,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"zh\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "developer/intro/guide.html",
"chars": 36048,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"zh\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "developer/intro/roadmap.html",
"chars": 24760,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"zh\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "developer/intro/tools.html",
"chars": 23871,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"zh\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "developer/protocols/mkcp.html",
"chars": 32247,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"zh\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "developer/protocols/muxcool.html",
"chars": 35339,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"zh\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "developer/protocols/vmess.html",
"chars": 44339,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"zh\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "en/awesome/ads.html",
"chars": 25820,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"en\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "en/awesome/tools.html",
"chars": 27375,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"en\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "en/configuration/api.html",
"chars": 24083,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"en\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "en/configuration/dns.html",
"chars": 29581,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"en\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "en/configuration/env.html",
"chars": 24068,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"en\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "en/configuration/index.html",
"chars": 26477,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"en\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "en/configuration/mux.html",
"chars": 22714,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"en\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "en/configuration/overview.html",
"chars": 45259,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"en\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "en/configuration/policy.html",
"chars": 30248,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"en\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "en/configuration/protocols/blackhole.html",
"chars": 24940,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"en\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "en/configuration/protocols/dns.html",
"chars": 23777,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"en\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "en/configuration/protocols/dokodemo.html",
"chars": 27633,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"en\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "en/configuration/protocols/freedom.html",
"chars": 24391,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"en\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "en/configuration/protocols/http.html",
"chars": 24954,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"en\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "en/configuration/protocols/mtproto.html",
"chars": 28366,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"en\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "en/configuration/protocols/shadowsocks.html",
"chars": 31418,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"en\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "en/configuration/protocols/socks.html",
"chars": 31220,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"en\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "en/configuration/protocols/vmess.html",
"chars": 34495,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"en\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "en/configuration/protocols.html",
"chars": 22148,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"en\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "en/configuration/reverse.html",
"chars": 40396,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"en\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "en/configuration/routing.html",
"chars": 37764,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"en\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "en/configuration/stats.html",
"chars": 23404,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"en\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "en/configuration/transport/domainsocket.html",
"chars": 23310,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"en\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "en/configuration/transport/h2.html",
"chars": 23244,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"en\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "en/configuration/transport/mkcp.html",
"chars": 27748,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"en\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "en/configuration/transport/quic.html",
"chars": 26286,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"en\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "en/configuration/transport/tcp.html",
"chars": 32031,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"en\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "en/configuration/transport/websocket.html",
"chars": 23438,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"en\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "en/configuration/transport.html",
"chars": 46986,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"en\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "en/developer/tools.html",
"chars": 22057,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"en\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "en/gitbook/gitbook-plugin-anchors/plugin.css",
"chars": 608,
"preview": "\na.plugin-anchor {\n color: inherit !important;\n display: none;\n margin-left: -30px;\n padding-left: 40px;\n "
},
{
"path": "en/gitbook/gitbook-plugin-ga/plugin.js",
"chars": 725,
"preview": "require([\"gitbook\"], function(gitbook) {\n // Load analytics.js\n gitbook.events.bind(\"start\", function(e, config) {"
},
{
"path": "en/gitbook/gitbook-plugin-hints/plugin-hints.css",
"chars": 136,
"preview": ".hints-icon {\n display: table-cell;\n padding-right: 15px;\n padding-left: 5px;\n}\n\n.hints-container {\n display"
},
{
"path": "en/gitbook/gitbook-plugin-mermaid-gb3/book/plugin.js",
"chars": 126,
"preview": "require([\n 'gitbook'\n], function (gitbook) {\n gitbook.events.bind('page.change', function () {\n mermaid.init();\n }"
},
{
"path": "en/gitbook/gitbook-plugin-mermaid-gb3/mermaid/mermaid.css",
"chars": 5204,
"preview": "/* Flowchart variables */\n/* Sequence Diagram variables */\n/* Gantt chart variables */\n.mermaid .label {\n color: #333;\n"
},
{
"path": "en/gitbook/gitbook-plugin-mermaid-gb3/mermaid/mermaid.forest.css",
"chars": 5252,
"preview": "/* Flowchart variables */\n/* Sequence Diagram variables */\n/* Gantt chart variables */\n.mermaid .label {\n font-family: "
},
{
"path": "en/gitbook/gitbook-plugin-prism/prism-a11y-dark.css",
"chars": 2437,
"preview": "/**\n * a11y-dark theme for JavaScript, CSS, and HTML\n * Based on the okaidia theme: https://github.com/PrismJS/prism/blo"
},
{
"path": "en/gitbook/gitbook-plugin-prism/prism-atom-dark.css",
"chars": 1998,
"preview": "/**\n * atom-dark theme for `prism.js`\n * Based on Atom's `atom-dark` theme: https://github.com/atom/atom-dark-syntax\n * "
},
{
"path": "en/gitbook/gitbook-plugin-prism/prism-base16-ateliersulphurpool.light.css",
"chars": 3290,
"preview": "/*\n\nName: Base16 Atelier Sulphurpool Light\nAuthor: Bram de Haan (http://atelierbram.github.io/syntax-highlight"
},
{
"path": "en/gitbook/gitbook-plugin-prism/prism-cb.css",
"chars": 3038,
"preview": "/*\n * Based on Plugin: Syntax Highlighter CB\n * Plugin URI: http://wp.tutsplus.com/tutorials/plugins/adding-a-syntax-hig"
},
{
"path": "en/gitbook/gitbook-plugin-prism/prism-darcula.css",
"chars": 2736,
"preview": "/**\n * Darcula theme\n *\n * Adapted from a theme based on:\n * IntelliJ Darcula Theme (https://github.com/bulenkov/Darcula"
},
{
"path": "en/gitbook/gitbook-plugin-prism/prism-dracula.css",
"chars": 1796,
"preview": "/**\n * Dracula Theme originally by Zeno Rocha [@zenorocha]\n * https://draculatheme.com/\n *\n * Ported for PrismJS by Albe"
},
{
"path": "en/gitbook/gitbook-plugin-prism/prism-duotone-dark.css",
"chars": 3347,
"preview": "/*\nName: Duotone Dark\nAuthor: Simurai, adapted from DuoTone themes for Atom (http://simurai.com/projects/2016/01/01/duot"
},
{
"path": "en/gitbook/gitbook-plugin-prism/prism-duotone-earth.css",
"chars": 3348,
"preview": "/*\nName: Duotone Earth\nAuthor: Simurai, adapted from DuoTone themes for Atom (http://simurai.com/projects/2016/01/01/d"
},
{
"path": "en/gitbook/gitbook-plugin-prism/prism-duotone-forest.css",
"chars": 3353,
"preview": "/*\nName: Duotone Forest\nAuthor: by Simurai, adapted from DuoTone themes for Atom (http://simurai.com/projects/2016/01/"
},
{
"path": "en/gitbook/gitbook-plugin-prism/prism-duotone-light.css",
"chars": 3338,
"preview": "/*\nName: Duotone Light\nAuthor: Simurai, adapted from DuoTone themes for Atom (http://simurai.com/projects/2016/01/01/d"
},
{
"path": "en/gitbook/gitbook-plugin-prism/prism-duotone-sea.css",
"chars": 3356,
"preview": "/*\nName: Duotone Sea\nAuthor: by Simurai, adapted from DuoTone themes by Simurai for Atom (http://simurai.com/projects/20"
},
{
"path": "en/gitbook/gitbook-plugin-prism/prism-duotone-space.css",
"chars": 3346,
"preview": "/*\nName: Duotone Space\nAuthor: Simurai, adapted from DuoTone themes for Atom (http://simurai.com/projects/2016/01/01/duo"
},
{
"path": "en/gitbook/gitbook-plugin-prism/prism-ghcolors.css",
"chars": 2106,
"preview": "/**\n * GHColors theme by Avi Aryan (http://aviaryan.in)\n * Inspired by Github syntax coloring\n */\n\ncode[class*=\"language"
},
{
"path": "en/gitbook/gitbook-plugin-prism/prism-hopscotch.css",
"chars": 1908,
"preview": "@import url(https://fonts.googleapis.com/css?family=Fira+Mono);\n/*\n * Hopscotch\n * by Jan T. Sott\n * https://github.com/"
},
{
"path": "en/gitbook/gitbook-plugin-prism/prism-material-dark.css",
"chars": 2497,
"preview": "code[class*=\"language-\"],\npre[class*=\"language-\"] {\n\ttext-align: left;\n\twhite-space: pre;\n\tword-spacing: normal;\n\tword-b"
},
{
"path": "en/gitbook/gitbook-plugin-prism/prism-material-light.css",
"chars": 2535,
"preview": "code[class*=\"language-\"],\npre[class*=\"language-\"] {\n\ttext-align: left;\n\twhite-space: pre;\n\tword-spacing: normal;\n\tword-b"
},
{
"path": "en/gitbook/gitbook-plugin-prism/prism-material-oceanic.css",
"chars": 2556,
"preview": "code[class*=\"language-\"],\npre[class*=\"language-\"] {\n\ttext-align: left;\n\twhite-space: pre;\n\tword-spacing: normal;\n\tword-b"
},
{
"path": "en/gitbook/gitbook-plugin-prism/prism-pojoaque.css",
"chars": 3826,
"preview": "/*\n * Pojoaque Style by Jason Tate\n * http://web-cms-designs.com/ftopict-10-pojoaque-style-for-highlight-js-code-highlig"
},
{
"path": "en/gitbook/gitbook-plugin-prism/prism-shades-of-purple.css",
"chars": 3352,
"preview": "/**\n * Shades of Purple Theme for Prism.js\n *\n * @author Ahmad Awais <https://twitter.com/MrAhmadAwais/>\n * @support Fol"
},
{
"path": "en/gitbook/gitbook-plugin-prism/prism-synthwave84.css",
"chars": 2454,
"preview": "/*\n * Synthwave '84 Theme originally by Robb Owen [@Robb0wen] for Visual Studio Code\n * Demo: https://marc.dev/demo/pris"
},
{
"path": "en/gitbook/gitbook-plugin-prism/prism-vs.css",
"chars": 2989,
"preview": "/**\n * VS theme by Andrew Lock (https://andrewlock.net)\n * Inspired by Visual Studio syntax coloring\n */\n\ncode[class*=\"l"
},
{
"path": "en/gitbook/gitbook-plugin-prism/prism-xonokai.css",
"chars": 3207,
"preview": "/**\n* xonokai theme for JavaScript, CSS and HTML\n* based on: https://github.com/MoOx/sass-prism-theme-base by Maxime Thi"
},
{
"path": "en/gitbook/gitbook.js",
"chars": 105399,
"preview": "!function e(t,n,r){function o(s,a){if(!n[s]){if(!t[s]){var u=\"function\"==typeof require&&require;if(!a&&u)return u(s,!0)"
},
{
"path": "en/gitbook/style.css",
"chars": 52701,
"preview": "/*! normalize.css v2.1.0 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup"
},
{
"path": "en/gitbook/theme.js",
"chars": 113262,
"preview": "!function e(t,n,r){function o(a,s){if(!n[a]){if(!t[a]){var u=\"function\"==typeof require&&require;if(!s&&u)return u(a,!0)"
},
{
"path": "en/index.html",
"chars": 23904,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"en\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "en/styles/website.css",
"chars": 645,
"preview": ".book-summary {\n font-family: \"Helvetica Neue\", \"Open Sans\", sans-serif;\n font-size: 14px;\n}\n\n.book-header .btn {\n pa"
},
{
"path": "en/welcome/command.html",
"chars": 29663,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"en\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "en/welcome/donate.html",
"chars": 25999,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"en\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "en/welcome/faq.html",
"chars": 26718,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"en\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "en/welcome/help.html",
"chars": 31228,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"en\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "en/welcome/install.html",
"chars": 27917,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"en\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "en/welcome/start.html",
"chars": 31258,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"en\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "en/welcome/versions.html",
"chars": 51765,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"en\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "en/welcome/workflow.html",
"chars": 24454,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"en\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "ext/index.html",
"chars": 592,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset='utf-8'>\n <meta name=\"go-import\" content=\"v2ray.com/ext g"
},
{
"path": "fa/awesome/ads.html",
"chars": 25815,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"fa\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "fa/awesome/tools.html",
"chars": 27369,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"fa\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "fa/configuration/api.html",
"chars": 27592,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"fa\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "fa/configuration/dns.html",
"chars": 33320,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"fa\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "fa/configuration/env.html",
"chars": 26658,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"fa\" dir=\"rtl\">\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; "
},
{
"path": "fa/configuration/index.html",
"chars": 33771,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"fa\" dir=\"rtl\">\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; "
},
{
"path": "fa/configuration/mux.html",
"chars": 24898,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"fa\" dir=\"rtl\">\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; "
},
{
"path": "fa/configuration/overview.html",
"chars": 64949,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"fa\" dir=\"rtl\">\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; "
},
{
"path": "fa/configuration/policy.html",
"chars": 31263,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"fa\" dir=\"rtl\">\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; "
},
{
"path": "fa/configuration/protocols/blackhole.html",
"chars": 26783,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"fa\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "fa/configuration/protocols/dns.html",
"chars": 23772,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"fa\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "fa/configuration/protocols/dokodemo.html",
"chars": 31921,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"fa\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "fa/configuration/protocols/freedom.html",
"chars": 26564,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"fa\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "fa/configuration/protocols/http.html",
"chars": 27415,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"fa\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "fa/configuration/protocols/mtproto.html",
"chars": 31846,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"fa\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "fa/configuration/protocols/shadowsocks.html",
"chars": 38890,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"fa\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "fa/configuration/protocols/socks.html",
"chars": 31560,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"fa\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "fa/configuration/protocols/vmess.html",
"chars": 42320,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"fa\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "fa/configuration/protocols.html",
"chars": 22915,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"fa\" dir=\"rtl\">\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; "
},
{
"path": "fa/configuration/reverse.html",
"chars": 51008,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"fa\" dir=\"rtl\">\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; "
},
{
"path": "fa/configuration/routing.html",
"chars": 45607,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"fa\" dir=\"rtl\">\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; "
},
{
"path": "fa/configuration/stats.html",
"chars": 26899,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"fa\" dir=\"rtl\">\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; "
},
{
"path": "fa/configuration/transport/domainsocket.html",
"chars": 26428,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"fa\" dir=\"rtl\">\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; "
},
{
"path": "fa/configuration/transport/h2.html",
"chars": 25403,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"fa\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "fa/configuration/transport/mkcp.html",
"chars": 36668,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"fa\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "fa/configuration/transport/quic.html",
"chars": 26283,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"fa\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "fa/configuration/transport/tcp.html",
"chars": 32194,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"fa\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "fa/configuration/transport/websocket.html",
"chars": 25256,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"fa\" dir=\"rtl\">\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; "
},
{
"path": "fa/configuration/transport.html",
"chars": 53639,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"fa\" dir=\"rtl\">\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; "
},
{
"path": "fa/developer/tools.html",
"chars": 22052,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"fa\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "fa/gitbook/gitbook-plugin-anchors/plugin.css",
"chars": 608,
"preview": "\na.plugin-anchor {\n color: inherit !important;\n display: none;\n margin-left: -30px;\n padding-left: 40px;\n "
},
{
"path": "fa/gitbook/gitbook-plugin-ga/plugin.js",
"chars": 725,
"preview": "require([\"gitbook\"], function(gitbook) {\n // Load analytics.js\n gitbook.events.bind(\"start\", function(e, config) {"
},
{
"path": "fa/gitbook/gitbook-plugin-hints/plugin-hints.css",
"chars": 136,
"preview": ".hints-icon {\n display: table-cell;\n padding-right: 15px;\n padding-left: 5px;\n}\n\n.hints-container {\n display"
},
{
"path": "fa/gitbook/gitbook-plugin-mermaid-gb3/book/plugin.js",
"chars": 126,
"preview": "require([\n 'gitbook'\n], function (gitbook) {\n gitbook.events.bind('page.change', function () {\n mermaid.init();\n }"
},
{
"path": "fa/gitbook/gitbook-plugin-mermaid-gb3/mermaid/mermaid.css",
"chars": 5204,
"preview": "/* Flowchart variables */\n/* Sequence Diagram variables */\n/* Gantt chart variables */\n.mermaid .label {\n color: #333;\n"
},
{
"path": "fa/gitbook/gitbook-plugin-mermaid-gb3/mermaid/mermaid.forest.css",
"chars": 5252,
"preview": "/* Flowchart variables */\n/* Sequence Diagram variables */\n/* Gantt chart variables */\n.mermaid .label {\n font-family: "
},
{
"path": "fa/gitbook/gitbook-plugin-prism/prism-a11y-dark.css",
"chars": 2437,
"preview": "/**\n * a11y-dark theme for JavaScript, CSS, and HTML\n * Based on the okaidia theme: https://github.com/PrismJS/prism/blo"
},
{
"path": "fa/gitbook/gitbook-plugin-prism/prism-atom-dark.css",
"chars": 1998,
"preview": "/**\n * atom-dark theme for `prism.js`\n * Based on Atom's `atom-dark` theme: https://github.com/atom/atom-dark-syntax\n * "
},
{
"path": "fa/gitbook/gitbook-plugin-prism/prism-base16-ateliersulphurpool.light.css",
"chars": 3290,
"preview": "/*\n\nName: Base16 Atelier Sulphurpool Light\nAuthor: Bram de Haan (http://atelierbram.github.io/syntax-highlight"
},
{
"path": "fa/gitbook/gitbook-plugin-prism/prism-cb.css",
"chars": 3038,
"preview": "/*\n * Based on Plugin: Syntax Highlighter CB\n * Plugin URI: http://wp.tutsplus.com/tutorials/plugins/adding-a-syntax-hig"
},
{
"path": "fa/gitbook/gitbook-plugin-prism/prism-darcula.css",
"chars": 2736,
"preview": "/**\n * Darcula theme\n *\n * Adapted from a theme based on:\n * IntelliJ Darcula Theme (https://github.com/bulenkov/Darcula"
},
{
"path": "fa/gitbook/gitbook-plugin-prism/prism-dracula.css",
"chars": 1796,
"preview": "/**\n * Dracula Theme originally by Zeno Rocha [@zenorocha]\n * https://draculatheme.com/\n *\n * Ported for PrismJS by Albe"
},
{
"path": "fa/gitbook/gitbook-plugin-prism/prism-duotone-dark.css",
"chars": 3347,
"preview": "/*\nName: Duotone Dark\nAuthor: Simurai, adapted from DuoTone themes for Atom (http://simurai.com/projects/2016/01/01/duot"
},
{
"path": "fa/gitbook/gitbook-plugin-prism/prism-duotone-earth.css",
"chars": 3348,
"preview": "/*\nName: Duotone Earth\nAuthor: Simurai, adapted from DuoTone themes for Atom (http://simurai.com/projects/2016/01/01/d"
},
{
"path": "fa/gitbook/gitbook-plugin-prism/prism-duotone-forest.css",
"chars": 3353,
"preview": "/*\nName: Duotone Forest\nAuthor: by Simurai, adapted from DuoTone themes for Atom (http://simurai.com/projects/2016/01/"
},
{
"path": "fa/gitbook/gitbook-plugin-prism/prism-duotone-light.css",
"chars": 3338,
"preview": "/*\nName: Duotone Light\nAuthor: Simurai, adapted from DuoTone themes for Atom (http://simurai.com/projects/2016/01/01/d"
},
{
"path": "fa/gitbook/gitbook-plugin-prism/prism-duotone-sea.css",
"chars": 3356,
"preview": "/*\nName: Duotone Sea\nAuthor: by Simurai, adapted from DuoTone themes by Simurai for Atom (http://simurai.com/projects/20"
},
{
"path": "fa/gitbook/gitbook-plugin-prism/prism-duotone-space.css",
"chars": 3346,
"preview": "/*\nName: Duotone Space\nAuthor: Simurai, adapted from DuoTone themes for Atom (http://simurai.com/projects/2016/01/01/duo"
},
{
"path": "fa/gitbook/gitbook-plugin-prism/prism-ghcolors.css",
"chars": 2106,
"preview": "/**\n * GHColors theme by Avi Aryan (http://aviaryan.in)\n * Inspired by Github syntax coloring\n */\n\ncode[class*=\"language"
},
{
"path": "fa/gitbook/gitbook-plugin-prism/prism-hopscotch.css",
"chars": 1908,
"preview": "@import url(https://fonts.googleapis.com/css?family=Fira+Mono);\n/*\n * Hopscotch\n * by Jan T. Sott\n * https://github.com/"
},
{
"path": "fa/gitbook/gitbook-plugin-prism/prism-material-dark.css",
"chars": 2497,
"preview": "code[class*=\"language-\"],\npre[class*=\"language-\"] {\n\ttext-align: left;\n\twhite-space: pre;\n\tword-spacing: normal;\n\tword-b"
},
{
"path": "fa/gitbook/gitbook-plugin-prism/prism-material-light.css",
"chars": 2535,
"preview": "code[class*=\"language-\"],\npre[class*=\"language-\"] {\n\ttext-align: left;\n\twhite-space: pre;\n\tword-spacing: normal;\n\tword-b"
},
{
"path": "fa/gitbook/gitbook-plugin-prism/prism-material-oceanic.css",
"chars": 2556,
"preview": "code[class*=\"language-\"],\npre[class*=\"language-\"] {\n\ttext-align: left;\n\twhite-space: pre;\n\tword-spacing: normal;\n\tword-b"
},
{
"path": "fa/gitbook/gitbook-plugin-prism/prism-pojoaque.css",
"chars": 3826,
"preview": "/*\n * Pojoaque Style by Jason Tate\n * http://web-cms-designs.com/ftopict-10-pojoaque-style-for-highlight-js-code-highlig"
},
{
"path": "fa/gitbook/gitbook-plugin-prism/prism-shades-of-purple.css",
"chars": 3352,
"preview": "/**\n * Shades of Purple Theme for Prism.js\n *\n * @author Ahmad Awais <https://twitter.com/MrAhmadAwais/>\n * @support Fol"
},
{
"path": "fa/gitbook/gitbook-plugin-prism/prism-synthwave84.css",
"chars": 2454,
"preview": "/*\n * Synthwave '84 Theme originally by Robb Owen [@Robb0wen] for Visual Studio Code\n * Demo: https://marc.dev/demo/pris"
},
{
"path": "fa/gitbook/gitbook-plugin-prism/prism-vs.css",
"chars": 2989,
"preview": "/**\n * VS theme by Andrew Lock (https://andrewlock.net)\n * Inspired by Visual Studio syntax coloring\n */\n\ncode[class*=\"l"
},
{
"path": "fa/gitbook/gitbook-plugin-prism/prism-xonokai.css",
"chars": 3207,
"preview": "/**\n* xonokai theme for JavaScript, CSS and HTML\n* based on: https://github.com/MoOx/sass-prism-theme-base by Maxime Thi"
},
{
"path": "fa/gitbook/gitbook.js",
"chars": 105399,
"preview": "!function e(t,n,r){function o(s,a){if(!n[s]){if(!t[s]){var u=\"function\"==typeof require&&require;if(!a&&u)return u(s,!0)"
},
{
"path": "fa/gitbook/style.css",
"chars": 52701,
"preview": "/*! normalize.css v2.1.0 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup"
},
{
"path": "fa/gitbook/theme.js",
"chars": 113262,
"preview": "!function e(t,n,r){function o(a,s){if(!n[a]){if(!t[a]){var u=\"function\"==typeof require&&require;if(!s&&u)return u(a,!0)"
},
{
"path": "fa/index.html",
"chars": 29036,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"fa\" >\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; charset=u"
},
{
"path": "fa/styles/website.css",
"chars": 787,
"preview": ".book-summary {\n font-family: \"Noto Sans CJK SC\", \"PingFang SC\", \"Microsoft Yahei\", \"Hiragino Sans GB\", sans-serif;\n f"
},
{
"path": "fa/ui_client/README.md",
"chars": 337,
"preview": "---\nrefcn: ui_client/index\nrefen: ui_client/index\n---\n# مشتریان پروژه V\n\nعلاوه بر هسته V2ray، پروژه V شامل انواع مختلفی "
},
{
"path": "fa/ui_client/android.md",
"chars": 1399,
"preview": "---\nrefcn: ui_client/android\nrefen: ui_client/android\n---\n# مشتری Android\n\n## BifrostV\n\nBifrostV یک برنامه آندروید بر اس"
},
{
"path": "fa/ui_client/ios.md",
"chars": 1631,
"preview": "---\nrefcn: ui_client/ios\nrefen: ui_client/ios\n---\n# مشتری iOS\n\n## Kitsunebi\n\nKitsunebi یک برنامه iOS مبتنی بر V2Ray است."
},
{
"path": "fa/ui_client/osx.md",
"chars": 661,
"preview": "---\nrefcn: ui_client/osx\nrefen: ui_client/osx\n---\n# Mac OS X\n\n## V2RayX\n\n* دانلود: [Github](https://github.com/Cenmrev/V"
},
{
"path": "fa/ui_client/service.md",
"chars": 1995,
"preview": "---\nrefcn: ui_client/service\nrefen: ui_client/service\n---\n# خدمات آنلاین\n\nThe following online services may help you bet"
},
{
"path": "fa/ui_client/windows.md",
"chars": 559,
"preview": "---\nrefcn: ui_client/windows\nrefen: ui_client/windows\n---\n# پنجره ها\n\n## V2RayW\n\n* دانلود: [Github](https://github.com/C"
},
{
"path": "fa/welcome/command.html",
"chars": 29976,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"fa\" dir=\"rtl\">\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; "
},
{
"path": "fa/welcome/donate.html",
"chars": 26215,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"fa\" dir=\"rtl\">\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; "
},
{
"path": "fa/welcome/faq.html",
"chars": 30425,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"fa\" dir=\"rtl\">\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; "
},
{
"path": "fa/welcome/help.html",
"chars": 37686,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"fa\" dir=\"rtl\">\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; "
},
{
"path": "fa/welcome/install.html",
"chars": 36200,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"fa\" dir=\"rtl\">\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; "
},
{
"path": "fa/welcome/license.md",
"chars": 1264,
"preview": "---\nrefcn: chapter_00/license\nrefen: welcome/license\n---\n# License\n\nProject V uses the following license.\n\n## V2Ray\n\nSou"
},
{
"path": "fa/welcome/pgp.md",
"chars": 3784,
"preview": "---\nrefcn: chapter_00/pgp\nrefen: welcome/pgp\n---\n# Private Communication\n\nPlease send a message to one of the address be"
},
{
"path": "fa/welcome/start.html",
"chars": 36210,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"fa\" dir=\"rtl\">\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; "
},
{
"path": "fa/welcome/tg.md",
"chars": 2269,
"preview": "---\nrefcn: chapter_00/tg\nrefen: welcome/tg\n---\n# Telegram Group\n\nProject V provides the following groups for different t"
},
{
"path": "fa/welcome/versions.html",
"chars": 52021,
"preview": "\n<!DOCTYPE HTML>\n<html lang=\"fa\" dir=\"rtl\">\n <head>\n <meta charset=\"UTF-8\">\n <meta content=\"text/html; "
}
]
// ... and 276 more files (download for full content)
About this extraction
This page contains the full source code of the v2ray/v2ray.github.io GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 476 files (9.3 MB), approximately 2.5M tokens, and a symbol index with 1530 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.