├── .gitignore ├── tmpl ├── robots.txt ├── assets │ ├── logo.png │ ├── fonts │ │ ├── firasans.ttf │ │ ├── firasans.woff │ │ ├── firasans.woff2 │ │ ├── firasansbold.ttf │ │ ├── firasansbold.woff │ │ ├── firasansbook.ttf │ │ ├── firasansbook.woff │ │ ├── firasanslight.ttf │ │ ├── firasansbold.woff2 │ │ ├── firasansbook.woff2 │ │ ├── firasansitalic.ttf │ │ ├── firasansitalic.woff │ │ ├── firasansitalic.woff2 │ │ ├── firasanslight.woff │ │ ├── firasanslight.woff2 │ │ ├── firasansmedium.ttf │ │ ├── firasansmedium.woff │ │ ├── firasansmedium.woff2 │ │ ├── firasanssemibold.ttf │ │ ├── firasansbolditalic.ttf │ │ ├── firasansbookitalic.ttf │ │ ├── firasansextralight.ttf │ │ ├── firasanssemibold.woff │ │ ├── firasanssemibold.woff2 │ │ ├── firasansbolditalic.woff │ │ ├── firasansbolditalic.woff2 │ │ ├── firasansbookitalic.woff │ │ ├── firasansbookitalic.woff2 │ │ ├── firasansextralight.woff │ │ ├── firasansextralight.woff2 │ │ ├── firasanslightitalic.ttf │ │ ├── firasanslightitalic.woff │ │ ├── firasanslightitalic.woff2 │ │ ├── firasansmediumitalic.ttf │ │ ├── firasansmediumitalic.woff │ │ ├── firasansmediumitalic.woff2 │ │ ├── firasanssemibolditalic.ttf │ │ ├── firasanssemibolditalic.woff │ │ ├── firasansextralightitalic.ttf │ │ ├── firasansextralightitalic.woff │ │ ├── firasansextralightitalic.woff2 │ │ ├── firasanssemibolditalic.woff2 │ │ └── firasans.css │ ├── awesome-go.css │ ├── theme.css │ ├── normalize.css │ ├── marked.js │ └── jquery-custom.min.js ├── sitemap.xml └── tmpl.html ├── .markdownlint.json ├── .mergify.yml ├── go.mod ├── CONTRIBUTING.md ├── repo.go ├── repo_test.go ├── AGENTS.md ├── license └── go.sum /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | -------------------------------------------------------------------------------- /tmpl/robots.txt: -------------------------------------------------------------------------------- 1 | User-Agent: * 2 | -------------------------------------------------------------------------------- /.markdownlint.json: -------------------------------------------------------------------------------- 1 | { 2 | "MD013": false, 3 | "MD051": false 4 | } -------------------------------------------------------------------------------- /tmpl/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rootsongjc/awesome-cloud-native/main/tmpl/assets/logo.png -------------------------------------------------------------------------------- /tmpl/assets/fonts/firasans.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rootsongjc/awesome-cloud-native/main/tmpl/assets/fonts/firasans.ttf -------------------------------------------------------------------------------- /tmpl/assets/fonts/firasans.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rootsongjc/awesome-cloud-native/main/tmpl/assets/fonts/firasans.woff -------------------------------------------------------------------------------- /tmpl/assets/fonts/firasans.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rootsongjc/awesome-cloud-native/main/tmpl/assets/fonts/firasans.woff2 -------------------------------------------------------------------------------- /tmpl/assets/fonts/firasansbold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rootsongjc/awesome-cloud-native/main/tmpl/assets/fonts/firasansbold.ttf -------------------------------------------------------------------------------- /tmpl/assets/fonts/firasansbold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rootsongjc/awesome-cloud-native/main/tmpl/assets/fonts/firasansbold.woff -------------------------------------------------------------------------------- /tmpl/assets/fonts/firasansbook.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rootsongjc/awesome-cloud-native/main/tmpl/assets/fonts/firasansbook.ttf -------------------------------------------------------------------------------- /tmpl/assets/fonts/firasansbook.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rootsongjc/awesome-cloud-native/main/tmpl/assets/fonts/firasansbook.woff -------------------------------------------------------------------------------- /tmpl/assets/fonts/firasanslight.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rootsongjc/awesome-cloud-native/main/tmpl/assets/fonts/firasanslight.ttf -------------------------------------------------------------------------------- /tmpl/assets/fonts/firasansbold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rootsongjc/awesome-cloud-native/main/tmpl/assets/fonts/firasansbold.woff2 -------------------------------------------------------------------------------- /tmpl/assets/fonts/firasansbook.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rootsongjc/awesome-cloud-native/main/tmpl/assets/fonts/firasansbook.woff2 -------------------------------------------------------------------------------- /tmpl/assets/fonts/firasansitalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rootsongjc/awesome-cloud-native/main/tmpl/assets/fonts/firasansitalic.ttf -------------------------------------------------------------------------------- /tmpl/assets/fonts/firasansitalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rootsongjc/awesome-cloud-native/main/tmpl/assets/fonts/firasansitalic.woff -------------------------------------------------------------------------------- /tmpl/assets/fonts/firasansitalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rootsongjc/awesome-cloud-native/main/tmpl/assets/fonts/firasansitalic.woff2 -------------------------------------------------------------------------------- /tmpl/assets/fonts/firasanslight.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rootsongjc/awesome-cloud-native/main/tmpl/assets/fonts/firasanslight.woff -------------------------------------------------------------------------------- /tmpl/assets/fonts/firasanslight.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rootsongjc/awesome-cloud-native/main/tmpl/assets/fonts/firasanslight.woff2 -------------------------------------------------------------------------------- /tmpl/assets/fonts/firasansmedium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rootsongjc/awesome-cloud-native/main/tmpl/assets/fonts/firasansmedium.ttf -------------------------------------------------------------------------------- /tmpl/assets/fonts/firasansmedium.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rootsongjc/awesome-cloud-native/main/tmpl/assets/fonts/firasansmedium.woff -------------------------------------------------------------------------------- /tmpl/assets/fonts/firasansmedium.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rootsongjc/awesome-cloud-native/main/tmpl/assets/fonts/firasansmedium.woff2 -------------------------------------------------------------------------------- /tmpl/assets/fonts/firasanssemibold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rootsongjc/awesome-cloud-native/main/tmpl/assets/fonts/firasanssemibold.ttf -------------------------------------------------------------------------------- /tmpl/assets/fonts/firasansbolditalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rootsongjc/awesome-cloud-native/main/tmpl/assets/fonts/firasansbolditalic.ttf -------------------------------------------------------------------------------- /tmpl/assets/fonts/firasansbookitalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rootsongjc/awesome-cloud-native/main/tmpl/assets/fonts/firasansbookitalic.ttf -------------------------------------------------------------------------------- /tmpl/assets/fonts/firasansextralight.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rootsongjc/awesome-cloud-native/main/tmpl/assets/fonts/firasansextralight.ttf -------------------------------------------------------------------------------- /tmpl/assets/fonts/firasanssemibold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rootsongjc/awesome-cloud-native/main/tmpl/assets/fonts/firasanssemibold.woff -------------------------------------------------------------------------------- /tmpl/assets/fonts/firasanssemibold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rootsongjc/awesome-cloud-native/main/tmpl/assets/fonts/firasanssemibold.woff2 -------------------------------------------------------------------------------- /tmpl/assets/fonts/firasansbolditalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rootsongjc/awesome-cloud-native/main/tmpl/assets/fonts/firasansbolditalic.woff -------------------------------------------------------------------------------- /tmpl/assets/fonts/firasansbolditalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rootsongjc/awesome-cloud-native/main/tmpl/assets/fonts/firasansbolditalic.woff2 -------------------------------------------------------------------------------- /tmpl/assets/fonts/firasansbookitalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rootsongjc/awesome-cloud-native/main/tmpl/assets/fonts/firasansbookitalic.woff -------------------------------------------------------------------------------- /tmpl/assets/fonts/firasansbookitalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rootsongjc/awesome-cloud-native/main/tmpl/assets/fonts/firasansbookitalic.woff2 -------------------------------------------------------------------------------- /tmpl/assets/fonts/firasansextralight.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rootsongjc/awesome-cloud-native/main/tmpl/assets/fonts/firasansextralight.woff -------------------------------------------------------------------------------- /tmpl/assets/fonts/firasansextralight.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rootsongjc/awesome-cloud-native/main/tmpl/assets/fonts/firasansextralight.woff2 -------------------------------------------------------------------------------- /tmpl/assets/fonts/firasanslightitalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rootsongjc/awesome-cloud-native/main/tmpl/assets/fonts/firasanslightitalic.ttf -------------------------------------------------------------------------------- /tmpl/assets/fonts/firasanslightitalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rootsongjc/awesome-cloud-native/main/tmpl/assets/fonts/firasanslightitalic.woff -------------------------------------------------------------------------------- /tmpl/assets/fonts/firasanslightitalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rootsongjc/awesome-cloud-native/main/tmpl/assets/fonts/firasanslightitalic.woff2 -------------------------------------------------------------------------------- /tmpl/assets/fonts/firasansmediumitalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rootsongjc/awesome-cloud-native/main/tmpl/assets/fonts/firasansmediumitalic.ttf -------------------------------------------------------------------------------- /tmpl/assets/fonts/firasansmediumitalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rootsongjc/awesome-cloud-native/main/tmpl/assets/fonts/firasansmediumitalic.woff -------------------------------------------------------------------------------- /tmpl/assets/fonts/firasansmediumitalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rootsongjc/awesome-cloud-native/main/tmpl/assets/fonts/firasansmediumitalic.woff2 -------------------------------------------------------------------------------- /tmpl/assets/fonts/firasanssemibolditalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rootsongjc/awesome-cloud-native/main/tmpl/assets/fonts/firasanssemibolditalic.ttf -------------------------------------------------------------------------------- /tmpl/assets/fonts/firasanssemibolditalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rootsongjc/awesome-cloud-native/main/tmpl/assets/fonts/firasanssemibolditalic.woff -------------------------------------------------------------------------------- /tmpl/assets/fonts/firasansextralightitalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rootsongjc/awesome-cloud-native/main/tmpl/assets/fonts/firasansextralightitalic.ttf -------------------------------------------------------------------------------- /tmpl/assets/fonts/firasansextralightitalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rootsongjc/awesome-cloud-native/main/tmpl/assets/fonts/firasansextralightitalic.woff -------------------------------------------------------------------------------- /tmpl/assets/fonts/firasansextralightitalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rootsongjc/awesome-cloud-native/main/tmpl/assets/fonts/firasansextralightitalic.woff2 -------------------------------------------------------------------------------- /tmpl/assets/fonts/firasanssemibolditalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rootsongjc/awesome-cloud-native/main/tmpl/assets/fonts/firasanssemibolditalic.woff2 -------------------------------------------------------------------------------- /.mergify.yml: -------------------------------------------------------------------------------- 1 | pull_request_rules: 2 | - name: Automatic merge on approval 3 | conditions: 4 | - "#approved-reviews-by>=1" 5 | actions: 6 | merge: 7 | method: squash 8 | -------------------------------------------------------------------------------- /tmpl/sitemap.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | https://jimmysong.io/awesome-cloud-native 10 | 2019-10-07T10:39:03+08:00 11 | 12 | 13 | -------------------------------------------------------------------------------- /go.mod: -------------------------------------------------------------------------------- 1 | module tmpl 2 | 3 | go 1.23.0 4 | 5 | toolchain go1.24.1 6 | 7 | require ( 8 | github.com/PuerkitoBio/goquery v1.9.1 9 | github.com/russross/blackfriday v1.6.0 10 | github.com/shurcooL/github_flavored_markdown v0.0.0-20210228213109-c3a9aa474629 11 | ) 12 | 13 | require ( 14 | github.com/andybalholm/cascadia v1.3.2 // indirect 15 | github.com/aymerick/douceur v0.2.0 // indirect 16 | github.com/gorilla/css v1.0.0 // indirect 17 | github.com/kr/pretty v0.3.1 // indirect 18 | github.com/microcosm-cc/bluemonday v1.0.26 // indirect 19 | github.com/sergi/go-diff v1.3.1 // indirect 20 | github.com/shurcooL/go v0.0.0-20230706063926-5fe729b41b3a // indirect 21 | github.com/shurcooL/go-goon v1.0.0 // indirect 22 | github.com/shurcooL/highlight_diff v0.0.0-20230708024848-22f825814995 // indirect 23 | github.com/shurcooL/highlight_go v0.0.0-20230708025100-33e05792540a // indirect 24 | github.com/shurcooL/octicon v0.0.0-20230705024016-66bff059edb8 // indirect 25 | github.com/shurcooL/sanitized_anchor_name v1.0.0 // indirect 26 | github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d // indirect 27 | github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e // indirect 28 | golang.org/x/net v0.38.0 // indirect 29 | ) 30 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contribution Guidelines 2 | 3 | Thanks for helping keep this Kubernetes and cloud-native catalog sharp. Please follow the rules below so the list stays consistent and searchable. 4 | 5 | ## General expectations 6 | 7 | - Additions **must be open source** (ideally GitHub-hosted) and clearly benefit cloud-native workloads. 8 | - Place each project in the **single best matching top-level category** from the table of contents. If unsure, explain the rationale in the PR description. 9 | - Keep descriptions on a single line, start with sentence case, and avoid marketing fluff. 10 | - Use the official project name as the link text and point directly to the canonical repository. 11 | 12 | ## Ordering & formatting 13 | 14 | - Categories and items are maintained in **alphabetical order**. Run `go test ./...` (see below) before submitting; it will fail if ordering or duplicates are wrong. 15 | - One entry per project. Remove retired or duplicate links when encountered. 16 | - New entries go directly under the relevant `##` heading with a trailing period only if the sentence is complete. 17 | 18 | ## Local checks before PR 19 | 20 | 1. `gofmt -w repo.go repo_test.go` (only needed if you touched Go files). 21 | 2. `go test ./...` – verifies alphabetical ordering and ensures no duplicate links. 22 | 3. `go run ./repo.go` – regenerates `tmpl/index.html`; run this whenever README content changes so the published site stays in sync. 23 | 24 | Include the commands you ran in your pull request description. 25 | 26 | ## Reporting issues 27 | 28 | Open an issue when you find outdated, broken, or abandoned projects, or when you’d like to propose a new category. Provide links or context so maintainers can validate quickly. 29 | 30 | Thanks again for contributing! 31 | -------------------------------------------------------------------------------- /repo.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "io/ioutil" 5 | "log" 6 | "os" 7 | "os/exec" 8 | "strings" 9 | "text/template" 10 | 11 | gfm "github.com/shurcooL/github_flavored_markdown" 12 | ) 13 | 14 | const ( 15 | readmePath = "./README.md" 16 | tplPath = "tmpl/tmpl.html" 17 | idxPath = "tmpl/index.html" 18 | ) 19 | 20 | type content struct { 21 | Body string 22 | } 23 | 24 | func updateRepo() { 25 | branchCmd := exec.Command("git", "rev-parse", "--abbrev-ref", "HEAD") 26 | out, err := branchCmd.Output() 27 | if err != nil { 28 | log.Printf("Skipping git pull (unable to detect branch): %v", err) 29 | return 30 | } 31 | 32 | currentBranch := strings.TrimSpace(string(out)) 33 | if currentBranch == "HEAD" || currentBranch == "" { 34 | log.Println("Skipping git pull: detached HEAD detected") 35 | return 36 | } 37 | 38 | pullCmd := exec.Command("git", "pull", "--ff-only") 39 | pullCmd.Stdout = os.Stdout 40 | pullCmd.Stderr = os.Stderr 41 | if err := pullCmd.Run(); err != nil { 42 | log.Printf("Continuing without git pull (failed to update repository): %v", err) 43 | } 44 | } 45 | 46 | func readMarkdownFile() []byte { 47 | input, err := ioutil.ReadFile(readmePath) 48 | if err != nil { 49 | log.Fatalf("Error reading README.md: %v", err) 50 | } 51 | return input 52 | } 53 | 54 | func generateHTML(input []byte) { 55 | body := string(gfm.Markdown(input)) 56 | c := &content{Body: body} 57 | 58 | t, err := template.ParseFiles(tplPath) 59 | if err != nil { 60 | log.Fatalf("Error parsing template: %v", err) 61 | } 62 | 63 | f, err := os.Create(idxPath) 64 | if err != nil { 65 | log.Fatalf("Error creating index.html: %v", err) 66 | } 67 | defer f.Close() 68 | 69 | if err := t.Execute(f, c); err != nil { 70 | log.Fatalf("Error executing template: %v", err) 71 | } 72 | } 73 | 74 | func main() { 75 | updateRepo() 76 | markdown := readMarkdownFile() 77 | generateHTML(markdown) 78 | log.Println("Successfully generated index.html") 79 | } 80 | -------------------------------------------------------------------------------- /repo_test.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "bytes" 5 | "io/ioutil" 6 | "sort" 7 | "strings" 8 | "testing" 9 | 10 | "github.com/PuerkitoBio/goquery" 11 | "github.com/russross/blackfriday" 12 | ) 13 | 14 | func TestAlpha(t *testing.T) { 15 | query := startQuery() 16 | 17 | query.Find("body > ul").Each(func(_ int, s *goquery.Selection) { 18 | testList(t, s) 19 | }) 20 | } 21 | 22 | func TestDuplicatedLinks(t *testing.T) { 23 | query := startQuery() 24 | links := make(map[string]bool, 0) 25 | 26 | query.Find("body li > a:first-child").Each(func(_ int, s *goquery.Selection) { 27 | t.Run(s.Text(), func(t *testing.T) { 28 | href, ok := s.Attr("href") 29 | if !ok { 30 | t.Error("expected to have href") 31 | } 32 | 33 | if links[href] { 34 | t.Fatalf("duplicated link '%s'", href) 35 | } 36 | 37 | links[href] = true 38 | }) 39 | }) 40 | } 41 | 42 | func testList(t *testing.T, list *goquery.Selection) { 43 | list.Find("ul").Each(func(_ int, items *goquery.Selection) { 44 | testList(t, items) 45 | items.RemoveFiltered("ul") 46 | }) 47 | 48 | category := list.Prev().Text() 49 | 50 | t.Run(category, func(t *testing.T) { 51 | checkAlphabeticOrder(t, list) 52 | }) 53 | } 54 | 55 | func readme() []byte { 56 | input, err := ioutil.ReadFile("./README.md") 57 | if err != nil { 58 | panic(err) 59 | } 60 | html := append([]byte(""), blackfriday.MarkdownCommon(input)...) 61 | html = append(html, []byte("")...) 62 | return html 63 | } 64 | 65 | func startQuery() *goquery.Document { 66 | buf := bytes.NewBuffer(readme()) 67 | query, err := goquery.NewDocumentFromReader(buf) 68 | if err != nil { 69 | panic(err) 70 | } 71 | 72 | return query 73 | } 74 | 75 | func checkAlphabeticOrder(t *testing.T, s *goquery.Selection) { 76 | items := s.Find("li > a:first-child").Map(func(_ int, li *goquery.Selection) string { 77 | return strings.ToLower(li.Text()) 78 | }) 79 | 80 | sorted := make([]string, len(items)) 81 | copy(sorted, items) 82 | sort.Strings(sorted) 83 | 84 | for k, item := range items { 85 | if item != sorted[k] { 86 | t.Errorf("expected '%s' but actual is '%s'", sorted[k], item) 87 | } 88 | } 89 | if t.Failed() { 90 | t.Logf("expected order is:\n%s", strings.Join(sorted, "\n")) 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /AGENTS.md: -------------------------------------------------------------------------------- 1 | # Repository Guidelines 2 | 3 | ## Project Structure & Module Organization 4 | 5 | The curated catalog lives in `README.md`, arranged by single-level categories. Supporting Go code (`repo.go`, `repo_test.go`) transforms that Markdown into the static site under `tmpl/`. Generated assets are written to `tmpl/index.html` using `tmpl/tmpl.html` as the layout and `tmpl/assets/` for shared resources. `CONTRIBUTING.md` describes community expectations; treat it as a companion reference when updating the list. 6 | 7 | ## Build, Test, and Development Commands 8 | 9 | - `go run ./repo.go`: Regenerates `tmpl/index.html` from the current README content. Use this before publishing to confirm the site view renders correctly. 10 | - `go test ./...`: Runs the verification suite that enforces alphabetical grouping and guards against duplicate links in the README. 11 | - `gofmt -w repo.go repo_test.go`: Normalizes Go source formatting whenever edits are made. 12 | 13 | ## Coding Style & Naming Conventions 14 | 15 | Maintain alphabetical ordering within each Markdown category and keep link text in Title Case (mirroring upstream project names). Descriptions should stay on a single line, use sentence case, and avoid trailing periods unless the sentence is complete. Go code follows standard `gofmt` conventions, tabs for indentation, and short, descriptive function names (`updateRepo`, `readMarkdownFile`). Template IDs and filenames remain lowercase-with-dashes. 16 | 17 | ## Testing Guidelines 18 | 19 | `go test ./...` must pass before submission; it parses the README to ensure every list item remains alphabetized and unique. When adding a project, re-run the tests after inserting the entry and adjust placement until the suite succeeds. If you modify the generator or templates, add focused unit tests in `repo_test.go` to cover the new behavior and keep fixtures minimal. 20 | 21 | ## Commit & Pull Request Guidelines 22 | 23 | Follow the existing Git history’s imperative tone (e.g., `Add litellm`, `Bump golang.org/x/net`). Each commit should group related changes—avoid mixing list edits with generator updates. Pull requests need a concise summary, the commands executed (`go test ./...`), and any context about category decisions. Include screenshots only when UI output in `tmpl/index.html` materially changes. Reference related issues or upstream announcements where applicable to justify additions or removals. 24 | 25 | ## Curation Workflow Tips 26 | 27 | Before adding an item, verify the repository is active and open source, and confirm it fits exactly one category. Prefer placing new tools under the most specific heading introduced in the reorganized taxonomy (e.g., `Build & Packaging Automation` rather than the broader `Continuous Delivery & GitOps`). When in doubt, document the rationale in the PR to help maintainers keep the list consistent over time. 28 | -------------------------------------------------------------------------------- /tmpl/assets/awesome-go.css: -------------------------------------------------------------------------------- 1 | * { 2 | max-width: 100%; 3 | box-sizing: border-box; 4 | font-family: "Fira Sans"; 5 | text-decoration: none; 6 | font-weight: 300; 7 | color: inherit; 8 | } 9 | .awesome-logo { 10 | max-width: 500px; 11 | width: 100%; 12 | margin: auto; 13 | display: block; 14 | } 15 | 16 | a { 17 | color: var(--link-color); 18 | } 19 | a:visited { 20 | color: var(--link-visited-color); 21 | } 22 | h1, h2, h3, h4 { 23 | color: var(--heading-color); 24 | font-weight: 400; 25 | } 26 | h1 > a:nth-child(1) { 27 | margin-left: 10px; 28 | } 29 | h1 > a img { 30 | padding-right: 5px; 31 | } 32 | 33 | #content { 34 | width: 100%; 35 | max-width: 960px; 36 | margin: 0 auto; 37 | padding: 56px 64px 72px; 38 | } 39 | 40 | #content h1:first-of-type { 41 | font-size: 2.75rem; 42 | margin-bottom: 8px; 43 | letter-spacing: -0.02em; 44 | } 45 | 46 | #content h1:first-of-type + blockquote { 47 | margin-top: 0; 48 | } 49 | 50 | #content h1:first-of-type::after { 51 | content: ""; 52 | display: block; 53 | margin-top: 18px; 54 | width: 100%; 55 | height: 1px; 56 | background: linear-gradient(90deg, var(--header-border), rgba(255,255,255,0)); 57 | } 58 | 59 | #content > h2:first-of-type { 60 | margin-top: 40px; 61 | } 62 | 63 | #content > h2:first-of-type + ul { 64 | background-color: var(--panel-bg); 65 | border: 1px solid var(--panel-border); 66 | border-radius: 16px; 67 | padding: 20px 24px; 68 | display: grid; 69 | gap: 12px; 70 | grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); 71 | list-style: none; 72 | margin-bottom: 40px; 73 | padding-left: 16px; 74 | } 75 | 76 | #content > h2:first-of-type + ul li { 77 | margin: 0; 78 | } 79 | 80 | blockquote { 81 | background-color: var(--blockquote-bg); 82 | border-left: 4px solid var(--blockquote-border); 83 | padding: 16px 20px; 84 | margin: 24px 0 32px; 85 | border-radius: 12px; 86 | font-style: italic; 87 | } 88 | 89 | blockquote p { 90 | margin: 0; 91 | } 92 | 93 | #content ul { 94 | margin: 0 0 28px; 95 | padding-left: 24px; 96 | } 97 | 98 | #content li { 99 | margin-bottom: 6px; 100 | line-height: 1.55; 101 | } 102 | 103 | #content li:last-child { 104 | margin-bottom: 0; 105 | } 106 | 107 | @media (max-width: 960px) { 108 | #content { 109 | padding: 48px 48px 64px; 110 | } 111 | } 112 | 113 | @media (max-width: 720px) { 114 | #content { 115 | padding: 32px 32px 56px; 116 | } 117 | 118 | #content h1:first-of-type { 119 | font-size: 2.1rem; 120 | line-height: 1.2; 121 | margin-bottom: 6px; 122 | } 123 | 124 | #content > h2:first-of-type + ul { 125 | grid-template-columns: 1fr; 126 | gap: 10px; 127 | padding: 18px 20px; 128 | } 129 | } 130 | 131 | @media (max-width: 420px) { 132 | #content * { 133 | word-wrap: break-word; 134 | } 135 | 136 | #content { 137 | padding: 28px 20px 48px; 138 | } 139 | 140 | #content h1:first-of-type { 141 | font-size: 1.8rem; 142 | } 143 | 144 | #content > h2:first-of-type + ul { 145 | padding-left: 12px; 146 | padding-right: 12px; 147 | padding-top: 16px; 148 | padding-bottom: 12px; 149 | } 150 | } 151 | -------------------------------------------------------------------------------- /tmpl/assets/theme.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --bg-color: #ffffff; 3 | --text-color: #1f2933; 4 | --heading-color: #1f2933; 5 | --link-color: #4950c5; 6 | --link-hover-color: #3730a3; 7 | --link-visited-color: #312e81; 8 | --panel-bg: rgba(15, 23, 42, 0.04); 9 | --panel-border: rgba(15, 23, 42, 0.08); 10 | --button-bg: rgba(15, 23, 42, 0.08); 11 | --button-hover-bg: rgba(15, 23, 42, 0.12); 12 | --button-text: #1f2933; 13 | --border-color: rgba(15, 23, 42, 0.08); 14 | --blockquote-bg: rgba(79, 70, 229, 0.06); 15 | --blockquote-border: rgba(79, 70, 229, 0.4); 16 | --header-border: rgba(15, 23, 42, 0.08); 17 | } 18 | 19 | body { 20 | background-color: var(--bg-color); 21 | color: var(--text-color); 22 | margin: 0; 23 | line-height: 1.65; 24 | transition: background-color 0.2s ease, color 0.2s ease; 25 | } 26 | 27 | a:hover { 28 | color: var(--link-hover-color); 29 | } 30 | 31 | a:visited { 32 | color: var(--link-visited-color); 33 | } 34 | 35 | body.dark-mode { 36 | --bg-color: #0f172a; 37 | --text-color: #e2e8f0; 38 | --heading-color: #f8fafc; 39 | --link-color: #a5b4fc; 40 | --link-hover-color: #c7d2fe; 41 | --link-visited-color: #e0e7ff; 42 | --panel-bg: rgba(148, 163, 184, 0.1); 43 | --panel-border: rgba(148, 163, 184, 0.18); 44 | --button-bg: rgba(148, 163, 184, 0.18); 45 | --button-hover-bg: rgba(148, 163, 184, 0.28); 46 | --button-text: #f8fafc; 47 | --border-color: rgba(148, 163, 184, 0.26); 48 | --blockquote-bg: rgba(129, 140, 248, 0.12); 49 | --blockquote-border: rgba(165, 180, 252, 0.6); 50 | --header-border: rgba(148, 163, 184, 0.22); 51 | } 52 | 53 | #theme-toggle { 54 | position: fixed; 55 | top: 24px; 56 | right: 24px; 57 | padding: 8px 14px; 58 | border-radius: 9999px; 59 | border: 1px solid var(--border-color); 60 | background-color: var(--button-bg); 61 | color: var(--button-text); 62 | font-size: 14px; 63 | font-weight: 500; 64 | backdrop-filter: blur(6px); 65 | cursor: pointer; 66 | transition: background-color 0.2s ease, color 0.2s ease, border-color 0.2s ease; 67 | z-index: 10; 68 | } 69 | 70 | #theme-toggle:hover, 71 | #theme-toggle:focus { 72 | background-color: var(--button-hover-bg); 73 | outline: none; 74 | } 75 | 76 | #content { 77 | background-color: transparent; 78 | } 79 | 80 | #back-to-top { 81 | position: fixed; 82 | bottom: 28px; 83 | right: 24px; 84 | padding: 10px 14px; 85 | border-radius: 9999px; 86 | border: 1px solid var(--border-color); 87 | background-color: var(--button-bg); 88 | color: var(--button-text); 89 | font-size: 13px; 90 | font-weight: 500; 91 | backdrop-filter: blur(6px); 92 | cursor: pointer; 93 | transition: opacity 0.2s ease, background-color 0.2s ease, border-color 0.2s ease; 94 | opacity: 0; 95 | pointer-events: none; 96 | z-index: 9; 97 | } 98 | 99 | #back-to-top.show { 100 | opacity: 1; 101 | pointer-events: auto; 102 | } 103 | 104 | #back-to-top:hover, 105 | #back-to-top:focus { 106 | background-color: var(--button-hover-bg); 107 | outline: none; 108 | } 109 | 110 | @media (max-width: 720px) { 111 | #theme-toggle { 112 | top: 12px; 113 | right: 12px; 114 | padding: 8px 12px; 115 | font-size: 13px; 116 | } 117 | 118 | #back-to-top { 119 | right: 12px; 120 | bottom: 18px; 121 | padding: 9px 12px; 122 | font-size: 12px; 123 | } 124 | } 125 | 126 | @media (max-width: 480px) { 127 | #theme-toggle { 128 | top: 10px; 129 | right: 10px; 130 | padding: 7px 10px; 131 | font-size: 12px; 132 | } 133 | 134 | #back-to-top { 135 | right: 10px; 136 | bottom: 14px; 137 | padding: 8px 10px; 138 | font-size: 11px; 139 | } 140 | } 141 | -------------------------------------------------------------------------------- /tmpl/tmpl.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | Awesome Cloud Native 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | {{.Body}} 25 |
26 | 27 | 28 | 29 | 85 | 116 | 117 | 118 | -------------------------------------------------------------------------------- /tmpl/assets/fonts/firasans.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'Fira Sans'; 3 | src: local('Fira Sans ExtraLight'), local('FiraSans-ExtraLight'), url('./firasansextralight.woff2') format('woff2'), url('./firasansextralight.woff') format('woff'), url('./firasansextralight.ttf') format('truetype'); 4 | font-weight: 100; 5 | font-style: normal; 6 | } 7 | 8 | @font-face { 9 | font-family: 'Fira Sans'; 10 | src: local('Fira Sans ExtraLight Italic'), local('FiraSans-ExtraLightItalic'), url('./firasansextralightitalic.woff2') format('woff2'), url('./firasansextralightitalic.woff') format('woff'), url('./firasansextralightitalic.ttf') format('truetype'); 11 | font-weight: 100; 12 | font-style: italic; 13 | } 14 | 15 | @font-face { 16 | font-family: 'Fira Sans'; 17 | src: local('Fira Sans Light'), local('FiraSans-Light'), url('./firasanslight.woff2') format('woff2'), url('./firasanslight.woff') format('woff'), url('./firasanslight.ttf') format('truetype'); 18 | font-weight: 200; 19 | font-style: normal; 20 | } 21 | 22 | @font-face { 23 | font-family: 'Fira Sans'; 24 | src: local('Fira Sans Light Italic'), local('FiraSans-LightItalic'), url('./firasanslightitalic.woff2') format('woff2'), url('./firasanslightitalic.woff') format('woff'), url('./firasanslightitalic.ttf') format('truetype'); 25 | font-weight: 200; 26 | font-style: italic; 27 | } 28 | 29 | @font-face { 30 | font-family: 'Fira Sans'; 31 | src: local('Fira Sans Book'), local('FiraSans-Book'), url('./firasansbook.woff2') format('woff2'), url('./firasansbook.woff') format('woff'), url('./firasansbook.ttf') format('truetype'); 32 | font-weight: 300; 33 | font-style: normal; 34 | } 35 | 36 | @font-face { 37 | font-family: 'Fira Sans'; 38 | src: local('Fira Sans Book Italic'), local('FiraSans-BookItalic'), url('./firasansbookitalic.woff2') format('woff2'), url('./firasansbookitalic.woff') format('woff'), url('./firasansbookitalic.ttf') format('truetype'); 39 | font-weight: 300; 40 | font-style: italic; 41 | } 42 | 43 | @font-face { 44 | font-family: 'Fira Sans'; 45 | src: local('Fira Sans'), local('FiraSans-Regular'), url('./firasans.woff2') format('woff2'), url('./firasans.woff') format('woff'), url('./firasans.ttf') format('truetype'); 46 | font-weight: 400; 47 | font-style: normal; 48 | } 49 | 50 | @font-face { 51 | font-family: 'Fira Sans'; 52 | src: local('Fira Sans Italic'), local('FiraSans-Italic'), url('./firasansitalic.woff2') format('woff2'), url('./firasansitalic.woff') format('woff'), url('./firasansitalic.ttf') format('truetype'); 53 | font-weight: 400; 54 | font-style: italic; 55 | } 56 | 57 | @font-face { 58 | font-family: 'Fira Sans'; 59 | src: local('Fira Sans Medium'), local('FiraSans-Medium'), url('./firasansmedium.woff2') format('woff2'), url('./firasansmedium.woff') format('woff'), url('./firasansmedium.ttf') format('truetype'); 60 | font-weight: 500; 61 | font-style: normal; 62 | } 63 | 64 | @font-face { 65 | font-family: 'Fira Sans'; 66 | src: local('Fira Sans Medium Italic'), local('FiraSans-MediumItalic'), url('./firasansmediumitalic.woff2') format('woff2'), url('./firasansmediumitalic.woff') format('woff'), url('./firasansmediumitalic.ttf') format('truetype'); 67 | font-weight: 500; 68 | font-style: italic; 69 | } 70 | 71 | @font-face { 72 | font-family: 'Fira Sans'; 73 | src: local('Fira Sans SemiBold'), local('FiraSans-SemiBold'), url('./firasanssemibold.woff2') format('woff2'), url('./firasanssemibold.woff') format('woff'), url('./firasanssemibold.ttf') format('truetype'); 74 | font-weight: 600; 75 | font-style: normal; 76 | } 77 | 78 | @font-face { 79 | font-family: 'Fira Sans'; 80 | src: local('Fira Sans SemiBold Italic'), local('FiraSans-SemiBoldItalic'), url('./firasanssemibolditalic.woff2') format('woff2'), url('./firasanssemibolditalic.woff') format('woff'), url('./firasanssemibolditalic.ttf') format('truetype'); 81 | font-weight: 600; 82 | font-style: italic; 83 | } 84 | 85 | @font-face { 86 | font-family: 'Fira Sans'; 87 | src: local('Fira Sans Bold'), local('FiraSans-Bold'), url('./firasansbold.woff2') format('woff2'), url('./firasansbold.woff') format('woff'), url('./firasansbold.ttf') format('truetype'); 88 | font-weight: 700; 89 | font-style: normal; 90 | } 91 | 92 | @font-face { 93 | font-family: 'Fira Sans'; 94 | src: local('Fira Sans Bold Italic'), local('FiraSans-BoldItalic'), url('./firasansbolditalic.woff2') format('woff2'), url('./firasansbolditalic.woff') format('woff'), url('./firasansbolditalic.ttf') format('truetype'); 95 | font-weight: 700; 96 | font-style: italic; 97 | } -------------------------------------------------------------------------------- /license: -------------------------------------------------------------------------------- 1 | Creative Commons Legal Code 2 | 3 | CC0 1.0 Universal 4 | 5 | CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE 6 | LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN 7 | ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS 8 | INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES 9 | REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS 10 | PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM 11 | THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED 12 | HEREUNDER. 13 | 14 | Statement of Purpose 15 | 16 | The laws of most jurisdictions throughout the world automatically confer 17 | exclusive Copyright and Related Rights (defined below) upon the creator 18 | and subsequent owner(s) (each and all, an "owner") of an original work of 19 | authorship and/or a database (each, a "Work"). 20 | 21 | Certain owners wish to permanently relinquish those rights to a Work for 22 | the purpose of contributing to a commons of creative, cultural and 23 | scientific works ("Commons") that the public can reliably and without fear 24 | of later claims of infringement build upon, modify, incorporate in other 25 | works, reuse and redistribute as freely as possible in any form whatsoever 26 | and for any purposes, including without limitation commercial purposes. 27 | These owners may contribute to the Commons to promote the ideal of a free 28 | culture and the further production of creative, cultural and scientific 29 | works, or to gain reputation or greater distribution for their Work in 30 | part through the use and efforts of others. 31 | 32 | For these and/or other purposes and motivations, and without any 33 | expectation of additional consideration or compensation, the person 34 | associating CC0 with a Work (the "Affirmer"), to the extent that he or she 35 | is an owner of Copyright and Related Rights in the Work, voluntarily 36 | elects to apply CC0 to the Work and publicly distribute the Work under its 37 | terms, with knowledge of his or her Copyright and Related Rights in the 38 | Work and the meaning and intended legal effect of CC0 on those rights. 39 | 40 | 1. Copyright and Related Rights. A Work made available under CC0 may be 41 | protected by copyright and related or neighboring rights ("Copyright and 42 | Related Rights"). Copyright and Related Rights include, but are not 43 | limited to, the following: 44 | 45 | i. the right to reproduce, adapt, distribute, perform, display, 46 | communicate, and translate a Work; 47 | ii. moral rights retained by the original author(s) and/or performer(s); 48 | iii. publicity and privacy rights pertaining to a person's image or 49 | likeness depicted in a Work; 50 | iv. rights protecting against unfair competition in regards to a Work, 51 | subject to the limitations in paragraph 4(a), below; 52 | v. rights protecting the extraction, dissemination, use and reuse of data 53 | in a Work; 54 | vi. database rights (such as those arising under Directive 96/9/EC of the 55 | European Parliament and of the Council of 11 March 1996 on the legal 56 | protection of databases, and under any national implementation 57 | thereof, including any amended or successor version of such 58 | directive); and 59 | vii. other similar, equivalent or corresponding rights throughout the 60 | world based on applicable law or treaty, and any national 61 | implementations thereof. 62 | 63 | 2. Waiver. To the greatest extent permitted by, but not in contravention 64 | of, applicable law, Affirmer hereby overtly, fully, permanently, 65 | irrevocably and unconditionally waives, abandons, and surrenders all of 66 | Affirmer's Copyright and Related Rights and associated claims and causes 67 | of action, whether now known or unknown (including existing as well as 68 | future claims and causes of action), in the Work (i) in all territories 69 | worldwide, (ii) for the maximum duration provided by applicable law or 70 | treaty (including future time extensions), (iii) in any current or future 71 | medium and for any number of copies, and (iv) for any purpose whatsoever, 72 | including without limitation commercial, advertising or promotional 73 | purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each 74 | member of the public at large and to the detriment of Affirmer's heirs and 75 | successors, fully intending that such Waiver shall not be subject to 76 | revocation, rescission, cancellation, termination, or any other legal or 77 | equitable action to disrupt the quiet enjoyment of the Work by the public 78 | as contemplated by Affirmer's express Statement of Purpose. 79 | 80 | 3. Public License Fallback. Should any part of the Waiver for any reason 81 | be judged legally invalid or ineffective under applicable law, then the 82 | Waiver shall be preserved to the maximum extent permitted taking into 83 | account Affirmer's express Statement of Purpose. In addition, to the 84 | extent the Waiver is so judged Affirmer hereby grants to each affected 85 | person a royalty-free, non transferable, non sublicensable, non exclusive, 86 | irrevocable and unconditional license to exercise Affirmer's Copyright and 87 | Related Rights in the Work (i) in all territories worldwide, (ii) for the 88 | maximum duration provided by applicable law or treaty (including future 89 | time extensions), (iii) in any current or future medium and for any number 90 | of copies, and (iv) for any purpose whatsoever, including without 91 | limitation commercial, advertising or promotional purposes (the 92 | "License"). The License shall be deemed effective as of the date CC0 was 93 | applied by Affirmer to the Work. Should any part of the License for any 94 | reason be judged legally invalid or ineffective under applicable law, such 95 | partial invalidity or ineffectiveness shall not invalidate the remainder 96 | of the License, and in such case Affirmer hereby affirms that he or she 97 | will not (i) exercise any of his or her remaining Copyright and Related 98 | Rights in the Work or (ii) assert any associated claims and causes of 99 | action with respect to the Work, in either case contrary to Affirmer's 100 | express Statement of Purpose. 101 | 102 | 4. Limitations and Disclaimers. 103 | 104 | a. No trademark or patent rights held by Affirmer are waived, abandoned, 105 | surrendered, licensed or otherwise affected by this document. 106 | b. Affirmer offers the Work as-is and makes no representations or 107 | warranties of any kind concerning the Work, express, implied, 108 | statutory or otherwise, including without limitation warranties of 109 | title, merchantability, fitness for a particular purpose, non 110 | infringement, or the absence of latent or other defects, accuracy, or 111 | the present or absence of errors, whether or not discoverable, all to 112 | the greatest extent permissible under applicable law. 113 | c. Affirmer disclaims responsibility for clearing rights of other persons 114 | that may apply to the Work or any use thereof, including without 115 | limitation any person's Copyright and Related Rights in the Work. 116 | Further, Affirmer disclaims responsibility for obtaining any necessary 117 | consents, permissions or other rights required for any use of the 118 | Work. 119 | d. Affirmer understands and acknowledges that Creative Commons is not a 120 | party to this document and has no duty or obligation with respect to 121 | this CC0 or use of the Work. 122 | -------------------------------------------------------------------------------- /go.sum: -------------------------------------------------------------------------------- 1 | github.com/PuerkitoBio/goquery v1.9.1 h1:mTL6XjbJTZdpfL+Gwl5U2h1l9yEkJjhmlTeV9VPW7UI= 2 | github.com/PuerkitoBio/goquery v1.9.1/go.mod h1:cW1n6TmIMDoORQU5IU/P1T3tGFunOeXEpGP2WHRwkbY= 3 | github.com/andybalholm/cascadia v1.3.2 h1:3Xi6Dw5lHF15JtdcmAHD3i1+T8plmv7BQ/nsViSLyss= 4 | github.com/andybalholm/cascadia v1.3.2/go.mod h1:7gtRlve5FxPPgIgX36uWBX58OdBsSS6lUvCFb+h7KvU= 5 | github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk= 6 | github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= 7 | github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= 8 | github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 9 | github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= 10 | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 11 | github.com/gorilla/css v1.0.0 h1:BQqNyPTi50JCFMTw/b67hByjMVXZRwGha6wxVGkeihY= 12 | github.com/gorilla/css v1.0.0/go.mod h1:Dn721qIggHpt4+EFCcTLTU/vk5ySda2ReITrtgBl60c= 13 | github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= 14 | github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= 15 | github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= 16 | github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= 17 | github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= 18 | github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= 19 | github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= 20 | github.com/microcosm-cc/bluemonday v1.0.26 h1:xbqSvqzQMeEHCqMi64VAs4d8uy6Mequs3rQ0k/Khz58= 21 | github.com/microcosm-cc/bluemonday v1.0.26/go.mod h1:JyzOCs9gkyQyjs+6h10UEVSe02CGwkhd72Xdqh78TWs= 22 | github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= 23 | github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= 24 | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 25 | github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= 26 | github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= 27 | github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= 28 | github.com/russross/blackfriday v1.6.0 h1:KqfZb0pUVN2lYqZUYRddxF4OR8ZMURnJIG5Y3VRLtww= 29 | github.com/russross/blackfriday v1.6.0/go.mod h1:ti0ldHuxg49ri4ksnFxlkCfN+hvslNlmVHqNRXXJNAY= 30 | github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= 31 | github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= 32 | github.com/shurcooL/github_flavored_markdown v0.0.0-20210228213109-c3a9aa474629 h1:86e54L0i3pH3dAIA8OxBbfLrVyhoGpnNk1iJCigAWYs= 33 | github.com/shurcooL/github_flavored_markdown v0.0.0-20210228213109-c3a9aa474629/go.mod h1:2dOwnU2uBioM+SGy2aZoq1f/Sd1l9OkAeAUvjSyvgU0= 34 | github.com/shurcooL/go v0.0.0-20230706063926-5fe729b41b3a h1:ZHfoO7ZJhws9NU1kzZhStUnnVQiPtDe1PzpUnc6HirU= 35 | github.com/shurcooL/go v0.0.0-20230706063926-5fe729b41b3a/go.mod h1:DNrlr0AR9NsHD/aoc2pPeu4uSBZ/71yCHkR42yrzW3M= 36 | github.com/shurcooL/go-goon v1.0.0 h1:BCQPvxGkHHJ4WpBO4m/9FXbITVIsvAm/T66cCcCGI7E= 37 | github.com/shurcooL/go-goon v1.0.0/go.mod h1:2wTHMsGo7qnpmqA8ADYZtP4I1DD94JpXGQ3Dxq2YQ5w= 38 | github.com/shurcooL/highlight_diff v0.0.0-20230708024848-22f825814995 h1:/6Fa0HAouqks/nlr3C3sv7KNDqutP3CM/MYz225uO28= 39 | github.com/shurcooL/highlight_diff v0.0.0-20230708024848-22f825814995/go.mod h1:eqklBUMsamqZbxXhhr6GafgswFTa5Aq12VQ0I2lnCR8= 40 | github.com/shurcooL/highlight_go v0.0.0-20230708025100-33e05792540a h1:aMmA4ghJXuzwIS/mEK+bf7U2WZECRxa3sPgR4QHj8Hw= 41 | github.com/shurcooL/highlight_go v0.0.0-20230708025100-33e05792540a/go.mod h1:kLtotffsKtKsCupV8wNnNwQQHBccB1Oy5VSg8P409Go= 42 | github.com/shurcooL/octicon v0.0.0-20230705024016-66bff059edb8 h1:W5meM/5DP0Igf+pS3Se363Y2DoDv9LUuZgQ24uG9LNY= 43 | github.com/shurcooL/octicon v0.0.0-20230705024016-66bff059edb8/go.mod h1:hWBWTvIJ918VxbNOk2hxQg1/5j1M9yQI1Kp8d9qrOq8= 44 | github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= 45 | github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= 46 | github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d h1:yKm7XZV6j9Ev6lojP2XaIshpT4ymkqhMeSghO5Ps00E= 47 | github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d/go.mod h1:UdhH50NIW0fCiwBSr0co2m7BnFLdv4fQTgdqdJTHFeE= 48 | github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e h1:qpG93cPwA5f7s/ZPBJnGOYQNK/vKsaDaseuKT5Asee8= 49 | github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e/go.mod h1:HuIsMU8RRBOtsCgI77wP899iHVBQpCmg4ErYMZB+2IA= 50 | github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= 51 | github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= 52 | github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= 53 | github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= 54 | golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= 55 | golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= 56 | golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= 57 | golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= 58 | golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 59 | golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= 60 | golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= 61 | golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= 62 | golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= 63 | golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8= 64 | golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= 65 | golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 66 | golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 67 | golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 68 | golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 69 | golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 70 | golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 71 | golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 72 | golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 73 | golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 74 | golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 75 | golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= 76 | golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= 77 | golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= 78 | golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= 79 | golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= 80 | golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= 81 | golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= 82 | golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= 83 | golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= 84 | golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= 85 | golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 86 | golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= 87 | golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= 88 | golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 89 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 90 | gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 91 | gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 92 | gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= 93 | gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= 94 | -------------------------------------------------------------------------------- /tmpl/assets/normalize.css: -------------------------------------------------------------------------------- 1 | /*! normalize.css v3.0.1 | MIT License | git.io/normalize */ 2 | 3 | /** 4 | * 1. Set default font family to sans-serif. 5 | * 2. Prevent iOS text size adjust after orientation change, without disabling 6 | * user zoom. 7 | */ 8 | 9 | html { 10 | font-family: sans-serif; /* 1 */ 11 | -ms-text-size-adjust: 100%; /* 2 */ 12 | -webkit-text-size-adjust: 100%; /* 2 */ 13 | } 14 | 15 | /** 16 | * Remove default margin. 17 | */ 18 | 19 | body { 20 | margin: 0; 21 | } 22 | 23 | /* HTML5 display definitions 24 | ========================================================================== */ 25 | 26 | /** 27 | * Correct `block` display not defined for any HTML5 element in IE 8/9. 28 | * Correct `block` display not defined for `details` or `summary` in IE 10/11 and Firefox. 29 | * Correct `block` display not defined for `main` in IE 11. 30 | */ 31 | 32 | article, 33 | aside, 34 | details, 35 | figcaption, 36 | figure, 37 | footer, 38 | header, 39 | hgroup, 40 | main, 41 | nav, 42 | section, 43 | summary { 44 | display: block; 45 | } 46 | 47 | /** 48 | * 1. Correct `inline-block` display not defined in IE 8/9. 49 | * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. 50 | */ 51 | 52 | audio, 53 | canvas, 54 | progress, 55 | video { 56 | display: inline-block; /* 1 */ 57 | vertical-align: baseline; /* 2 */ 58 | } 59 | 60 | /** 61 | * Prevent modern browsers from displaying `audio` without controls. 62 | * Remove excess height in iOS 5 devices. 63 | */ 64 | 65 | audio:not([controls]) { 66 | display: none; 67 | height: 0; 68 | } 69 | 70 | /** 71 | * Address `[hidden]` styling not present in IE 8/9/10. 72 | * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. 73 | */ 74 | 75 | [hidden], 76 | template { 77 | display: none; 78 | } 79 | 80 | /* Links 81 | ========================================================================== */ 82 | 83 | /** 84 | * Remove the gray background color from active links in IE 10. 85 | */ 86 | 87 | a { 88 | background: transparent; 89 | } 90 | 91 | /** 92 | * Improve readability when focused and also mouse hovered in all browsers. 93 | */ 94 | 95 | a:active, 96 | a:hover { 97 | outline: 0; 98 | } 99 | 100 | /* Text-level semantics 101 | ========================================================================== */ 102 | 103 | /** 104 | * Address styling not present in IE 8/9/10/11, Safari, and Chrome. 105 | */ 106 | 107 | abbr[title] { 108 | border-bottom: 1px dotted; 109 | } 110 | 111 | /** 112 | * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. 113 | */ 114 | 115 | b, 116 | strong { 117 | font-weight: bold; 118 | } 119 | 120 | /** 121 | * Address styling not present in Safari and Chrome. 122 | */ 123 | 124 | dfn { 125 | font-style: italic; 126 | } 127 | 128 | /** 129 | * Address variable `h1` font-size and margin within `section` and `article` 130 | * contexts in Firefox 4+, Safari, and Chrome. 131 | */ 132 | 133 | h1 { 134 | font-size: 2em; 135 | margin: 0.67em 0; 136 | } 137 | 138 | /** 139 | * Address styling not present in IE 8/9. 140 | */ 141 | 142 | mark { 143 | background: #ff0; 144 | color: #000; 145 | } 146 | 147 | /** 148 | * Address inconsistent and variable font size in all browsers. 149 | */ 150 | 151 | small { 152 | font-size: 80%; 153 | } 154 | 155 | /** 156 | * Prevent `sub` and `sup` affecting `line-height` in all browsers. 157 | */ 158 | 159 | sub, 160 | sup { 161 | font-size: 75%; 162 | line-height: 0; 163 | position: relative; 164 | vertical-align: baseline; 165 | } 166 | 167 | sup { 168 | top: -0.5em; 169 | } 170 | 171 | sub { 172 | bottom: -0.25em; 173 | } 174 | 175 | /* Embedded content 176 | ========================================================================== */ 177 | 178 | /** 179 | * Remove border when inside `a` element in IE 8/9/10. 180 | */ 181 | 182 | img { 183 | border: 0; 184 | } 185 | 186 | /** 187 | * Correct overflow not hidden in IE 9/10/11. 188 | */ 189 | 190 | svg:not(:root) { 191 | overflow: hidden; 192 | } 193 | 194 | /* Grouping content 195 | ========================================================================== */ 196 | 197 | /** 198 | * Address margin not present in IE 8/9 and Safari. 199 | */ 200 | 201 | figure { 202 | margin: 1em 40px; 203 | } 204 | 205 | /** 206 | * Address differences between Firefox and other browsers. 207 | */ 208 | 209 | hr { 210 | -moz-box-sizing: content-box; 211 | box-sizing: content-box; 212 | height: 0; 213 | } 214 | 215 | /** 216 | * Contain overflow in all browsers. 217 | */ 218 | 219 | pre { 220 | overflow: auto; 221 | } 222 | 223 | /** 224 | * Address odd `em`-unit font size rendering in all browsers. 225 | */ 226 | 227 | code, 228 | kbd, 229 | pre, 230 | samp { 231 | font-family: monospace, monospace; 232 | font-size: 1em; 233 | } 234 | 235 | /* Forms 236 | ========================================================================== */ 237 | 238 | /** 239 | * Known limitation: by default, Chrome and Safari on OS X allow very limited 240 | * styling of `select`, unless a `border` property is set. 241 | */ 242 | 243 | /** 244 | * 1. Correct color not being inherited. 245 | * Known issue: affects color of disabled elements. 246 | * 2. Correct font properties not being inherited. 247 | * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. 248 | */ 249 | 250 | button, 251 | input, 252 | optgroup, 253 | select, 254 | textarea { 255 | color: inherit; /* 1 */ 256 | font: inherit; /* 2 */ 257 | margin: 0; /* 3 */ 258 | } 259 | 260 | /** 261 | * Address `overflow` set to `hidden` in IE 8/9/10/11. 262 | */ 263 | 264 | button { 265 | overflow: visible; 266 | } 267 | 268 | /** 269 | * Address inconsistent `text-transform` inheritance for `button` and `select`. 270 | * All other form control elements do not inherit `text-transform` values. 271 | * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. 272 | * Correct `select` style inheritance in Firefox. 273 | */ 274 | 275 | button, 276 | select { 277 | text-transform: none; 278 | } 279 | 280 | /** 281 | * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` 282 | * and `video` controls. 283 | * 2. Correct inability to style clickable `input` types in iOS. 284 | * 3. Improve usability and consistency of cursor style between image-type 285 | * `input` and others. 286 | */ 287 | 288 | button, 289 | html input[type="button"], /* 1 */ 290 | input[type="reset"], 291 | input[type="submit"] { 292 | -webkit-appearance: button; /* 2 */ 293 | cursor: pointer; /* 3 */ 294 | } 295 | 296 | /** 297 | * Re-set default cursor for disabled elements. 298 | */ 299 | 300 | button[disabled], 301 | html input[disabled] { 302 | cursor: default; 303 | } 304 | 305 | /** 306 | * Remove inner padding and border in Firefox 4+. 307 | */ 308 | 309 | button::-moz-focus-inner, 310 | input::-moz-focus-inner { 311 | border: 0; 312 | padding: 0; 313 | } 314 | 315 | /** 316 | * Address Firefox 4+ setting `line-height` on `input` using `!important` in 317 | * the UA stylesheet. 318 | */ 319 | 320 | input { 321 | line-height: normal; 322 | } 323 | 324 | /** 325 | * It's recommended that you don't attempt to style these elements. 326 | * Firefox's implementation doesn't respect box-sizing, padding, or width. 327 | * 328 | * 1. Address box sizing set to `content-box` in IE 8/9/10. 329 | * 2. Remove excess padding in IE 8/9/10. 330 | */ 331 | 332 | input[type="checkbox"], 333 | input[type="radio"] { 334 | box-sizing: border-box; /* 1 */ 335 | padding: 0; /* 2 */ 336 | } 337 | 338 | /** 339 | * Fix the cursor style for Chrome's increment/decrement buttons. For certain 340 | * `font-size` values of the `input`, it causes the cursor style of the 341 | * decrement button to change from `default` to `text`. 342 | */ 343 | 344 | input[type="number"]::-webkit-inner-spin-button, 345 | input[type="number"]::-webkit-outer-spin-button { 346 | height: auto; 347 | } 348 | 349 | /** 350 | * 1. Address `appearance` set to `searchfield` in Safari and Chrome. 351 | * 2. Address `box-sizing` set to `border-box` in Safari and Chrome 352 | * (include `-moz` to future-proof). 353 | */ 354 | 355 | input[type="search"] { 356 | -webkit-appearance: textfield; /* 1 */ 357 | -moz-box-sizing: content-box; 358 | -webkit-box-sizing: content-box; /* 2 */ 359 | box-sizing: content-box; 360 | } 361 | 362 | /** 363 | * Remove inner padding and search cancel button in Safari and Chrome on OS X. 364 | * Safari (but not Chrome) clips the cancel button when the search input has 365 | * padding (and `textfield` appearance). 366 | */ 367 | 368 | input[type="search"]::-webkit-search-cancel-button, 369 | input[type="search"]::-webkit-search-decoration { 370 | -webkit-appearance: none; 371 | } 372 | 373 | /** 374 | * Define consistent border, margin, and padding. 375 | */ 376 | 377 | fieldset { 378 | border: 1px solid #c0c0c0; 379 | margin: 0 2px; 380 | padding: 0.35em 0.625em 0.75em; 381 | } 382 | 383 | /** 384 | * 1. Correct `color` not being inherited in IE 8/9/10/11. 385 | * 2. Remove padding so people aren't caught out if they zero out fieldsets. 386 | */ 387 | 388 | legend { 389 | border: 0; /* 1 */ 390 | padding: 0; /* 2 */ 391 | } 392 | 393 | /** 394 | * Remove default vertical scrollbar in IE 8/9/10/11. 395 | */ 396 | 397 | textarea { 398 | overflow: auto; 399 | } 400 | 401 | /** 402 | * Don't inherit the `font-weight` (applied by a rule above). 403 | * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. 404 | */ 405 | 406 | optgroup { 407 | font-weight: bold; 408 | } 409 | 410 | /* Tables 411 | ========================================================================== */ 412 | 413 | /** 414 | * Remove most spacing between table cells. 415 | */ 416 | 417 | table { 418 | border-collapse: collapse; 419 | border-spacing: 0; 420 | } 421 | 422 | td, 423 | th { 424 | padding: 0; 425 | } 426 | -------------------------------------------------------------------------------- /tmpl/assets/marked.js: -------------------------------------------------------------------------------- 1 | /** 2 | * marked - a markdown parser 3 | * Copyright (c) 2011-2014, Christopher Jeffrey. (MIT Licensed) 4 | * https://github.com/chjj/marked 5 | */ 6 | 7 | ;(function() { 8 | 9 | /** 10 | * Block-Level Grammar 11 | */ 12 | 13 | var block = { 14 | newline: /^\n+/, 15 | code: /^( {4}[^\n]+\n*)+/, 16 | fences: noop, 17 | hr: /^( *[-*_]){3,} *(?:\n+|$)/, 18 | heading: /^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/, 19 | nptable: noop, 20 | lheading: /^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/, 21 | blockquote: /^( *>[^\n]+(\n(?!def)[^\n]+)*\n*)+/, 22 | list: /^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/, 23 | html: /^ *(?:comment *(?:\n|\s*$)|closed *(?:\n{2,}|\s*$)|closing *(?:\n{2,}|\s*$))/, 24 | def: /^ *\[([^\]]+)\]: *]+)>?(?: +["(]([^\n]+)[")])? *(?:\n+|$)/, 25 | table: noop, 26 | paragraph: /^((?:[^\n]+\n?(?!hr|heading|lheading|blockquote|tag|def))+)\n*/, 27 | text: /^[^\n]+/ 28 | }; 29 | 30 | block.bullet = /(?:[*+-]|\d+\.)/; 31 | block.item = /^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/; 32 | block.item = replace(block.item, 'gm') 33 | (/bull/g, block.bullet) 34 | (); 35 | 36 | block.list = replace(block.list) 37 | (/bull/g, block.bullet) 38 | ('hr', '\\n+(?=\\1?(?:[-*_] *){3,}(?:\\n+|$))') 39 | ('def', '\\n+(?=' + block.def.source + ')') 40 | (); 41 | 42 | block.blockquote = replace(block.blockquote) 43 | ('def', block.def) 44 | (); 45 | 46 | block._tag = '(?!(?:' 47 | + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code' 48 | + '|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo' 49 | + '|span|br|wbr|ins|del|img)\\b)\\w+(?!:/|[^\\w\\s@]*@)\\b'; 50 | 51 | block.html = replace(block.html) 52 | ('comment', //) 53 | ('closed', /<(tag)[\s\S]+?<\/\1>/) 54 | ('closing', /])*?>/) 55 | (/tag/g, block._tag) 56 | (); 57 | 58 | block.paragraph = replace(block.paragraph) 59 | ('hr', block.hr) 60 | ('heading', block.heading) 61 | ('lheading', block.lheading) 62 | ('blockquote', block.blockquote) 63 | ('tag', '<' + block._tag) 64 | ('def', block.def) 65 | (); 66 | 67 | /** 68 | * Normal Block Grammar 69 | */ 70 | 71 | block.normal = merge({}, block); 72 | 73 | /** 74 | * GFM Block Grammar 75 | */ 76 | 77 | block.gfm = merge({}, block.normal, { 78 | fences: /^ *(`{3,}|~{3,})[ \.]*(\S+)? *\n([\s\S]*?)\s*\1 *(?:\n+|$)/, 79 | paragraph: /^/, 80 | heading: /^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/ 81 | }); 82 | 83 | block.gfm.paragraph = replace(block.paragraph) 84 | ('(?!', '(?!' 85 | + block.gfm.fences.source.replace('\\1', '\\2') + '|' 86 | + block.list.source.replace('\\1', '\\3') + '|') 87 | (); 88 | 89 | /** 90 | * GFM + Tables Block Grammar 91 | */ 92 | 93 | block.tables = merge({}, block.gfm, { 94 | nptable: /^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/, 95 | table: /^ *\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/ 96 | }); 97 | 98 | /** 99 | * Block Lexer 100 | */ 101 | 102 | function Lexer(options) { 103 | this.tokens = []; 104 | this.tokens.links = {}; 105 | this.options = options || marked.defaults; 106 | this.rules = block.normal; 107 | 108 | if (this.options.gfm) { 109 | if (this.options.tables) { 110 | this.rules = block.tables; 111 | } else { 112 | this.rules = block.gfm; 113 | } 114 | } 115 | } 116 | 117 | /** 118 | * Expose Block Rules 119 | */ 120 | 121 | Lexer.rules = block; 122 | 123 | /** 124 | * Static Lex Method 125 | */ 126 | 127 | Lexer.lex = function(src, options) { 128 | var lexer = new Lexer(options); 129 | return lexer.lex(src); 130 | }; 131 | 132 | /** 133 | * Preprocessing 134 | */ 135 | 136 | Lexer.prototype.lex = function(src) { 137 | src = src 138 | .replace(/\r\n|\r/g, '\n') 139 | .replace(/\t/g, ' ') 140 | .replace(/\u00a0/g, ' ') 141 | .replace(/\u2424/g, '\n'); 142 | 143 | return this.token(src, true); 144 | }; 145 | 146 | /** 147 | * Lexing 148 | */ 149 | 150 | Lexer.prototype.token = function(src, top, bq) { 151 | var src = src.replace(/^ +$/gm, '') 152 | , next 153 | , loose 154 | , cap 155 | , bull 156 | , b 157 | , item 158 | , space 159 | , i 160 | , l; 161 | 162 | while (src) { 163 | // newline 164 | if (cap = this.rules.newline.exec(src)) { 165 | src = src.substring(cap[0].length); 166 | if (cap[0].length > 1) { 167 | this.tokens.push({ 168 | type: 'space' 169 | }); 170 | } 171 | } 172 | 173 | // code 174 | if (cap = this.rules.code.exec(src)) { 175 | src = src.substring(cap[0].length); 176 | cap = cap[0].replace(/^ {4}/gm, ''); 177 | this.tokens.push({ 178 | type: 'code', 179 | text: !this.options.pedantic 180 | ? cap.replace(/\n+$/, '') 181 | : cap 182 | }); 183 | continue; 184 | } 185 | 186 | // fences (gfm) 187 | if (cap = this.rules.fences.exec(src)) { 188 | src = src.substring(cap[0].length); 189 | this.tokens.push({ 190 | type: 'code', 191 | lang: cap[2], 192 | text: cap[3] || '' 193 | }); 194 | continue; 195 | } 196 | 197 | // heading 198 | if (cap = this.rules.heading.exec(src)) { 199 | src = src.substring(cap[0].length); 200 | this.tokens.push({ 201 | type: 'heading', 202 | depth: cap[1].length, 203 | text: cap[2] 204 | }); 205 | continue; 206 | } 207 | 208 | // table no leading pipe (gfm) 209 | if (top && (cap = this.rules.nptable.exec(src))) { 210 | src = src.substring(cap[0].length); 211 | 212 | item = { 213 | type: 'table', 214 | header: cap[1].replace(/^ *| *\| *$/g, '').split(/ *\| */), 215 | align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */), 216 | cells: cap[3].replace(/\n$/, '').split('\n') 217 | }; 218 | 219 | for (i = 0; i < item.align.length; i++) { 220 | if (/^ *-+: *$/.test(item.align[i])) { 221 | item.align[i] = 'right'; 222 | } else if (/^ *:-+: *$/.test(item.align[i])) { 223 | item.align[i] = 'center'; 224 | } else if (/^ *:-+ *$/.test(item.align[i])) { 225 | item.align[i] = 'left'; 226 | } else { 227 | item.align[i] = null; 228 | } 229 | } 230 | 231 | for (i = 0; i < item.cells.length; i++) { 232 | item.cells[i] = item.cells[i].split(/ *\| */); 233 | } 234 | 235 | this.tokens.push(item); 236 | 237 | continue; 238 | } 239 | 240 | // lheading 241 | if (cap = this.rules.lheading.exec(src)) { 242 | src = src.substring(cap[0].length); 243 | this.tokens.push({ 244 | type: 'heading', 245 | depth: cap[2] === '=' ? 1 : 2, 246 | text: cap[1] 247 | }); 248 | continue; 249 | } 250 | 251 | // hr 252 | if (cap = this.rules.hr.exec(src)) { 253 | src = src.substring(cap[0].length); 254 | this.tokens.push({ 255 | type: 'hr' 256 | }); 257 | continue; 258 | } 259 | 260 | // blockquote 261 | if (cap = this.rules.blockquote.exec(src)) { 262 | src = src.substring(cap[0].length); 263 | 264 | this.tokens.push({ 265 | type: 'blockquote_start' 266 | }); 267 | 268 | cap = cap[0].replace(/^ *> ?/gm, ''); 269 | 270 | // Pass `top` to keep the current 271 | // "toplevel" state. This is exactly 272 | // how markdown.pl works. 273 | this.token(cap, top, true); 274 | 275 | this.tokens.push({ 276 | type: 'blockquote_end' 277 | }); 278 | 279 | continue; 280 | } 281 | 282 | // list 283 | if (cap = this.rules.list.exec(src)) { 284 | src = src.substring(cap[0].length); 285 | bull = cap[2]; 286 | 287 | this.tokens.push({ 288 | type: 'list_start', 289 | ordered: bull.length > 1 290 | }); 291 | 292 | // Get each top-level item. 293 | cap = cap[0].match(this.rules.item); 294 | 295 | next = false; 296 | l = cap.length; 297 | i = 0; 298 | 299 | for (; i < l; i++) { 300 | item = cap[i]; 301 | 302 | // Remove the list item's bullet 303 | // so it is seen as the next token. 304 | space = item.length; 305 | item = item.replace(/^ *([*+-]|\d+\.) +/, ''); 306 | 307 | // Outdent whatever the 308 | // list item contains. Hacky. 309 | if (~item.indexOf('\n ')) { 310 | space -= item.length; 311 | item = !this.options.pedantic 312 | ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '') 313 | : item.replace(/^ {1,4}/gm, ''); 314 | } 315 | 316 | // Determine whether the next list item belongs here. 317 | // Backpedal if it does not belong in this list. 318 | if (this.options.smartLists && i !== l - 1) { 319 | b = block.bullet.exec(cap[i + 1])[0]; 320 | if (bull !== b && !(bull.length > 1 && b.length > 1)) { 321 | src = cap.slice(i + 1).join('\n') + src; 322 | i = l - 1; 323 | } 324 | } 325 | 326 | // Determine whether item is loose or not. 327 | // Use: /(^|\n)(?! )[^\n]+\n\n(?!\s*$)/ 328 | // for discount behavior. 329 | loose = next || /\n\n(?!\s*$)/.test(item); 330 | if (i !== l - 1) { 331 | next = item.charAt(item.length - 1) === '\n'; 332 | if (!loose) loose = next; 333 | } 334 | 335 | this.tokens.push({ 336 | type: loose 337 | ? 'loose_item_start' 338 | : 'list_item_start' 339 | }); 340 | 341 | // Recurse. 342 | this.token(item, false, bq); 343 | 344 | this.tokens.push({ 345 | type: 'list_item_end' 346 | }); 347 | } 348 | 349 | this.tokens.push({ 350 | type: 'list_end' 351 | }); 352 | 353 | continue; 354 | } 355 | 356 | // html 357 | if (cap = this.rules.html.exec(src)) { 358 | src = src.substring(cap[0].length); 359 | this.tokens.push({ 360 | type: this.options.sanitize 361 | ? 'paragraph' 362 | : 'html', 363 | pre: !this.options.sanitizer 364 | && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'), 365 | text: cap[0] 366 | }); 367 | continue; 368 | } 369 | 370 | // def 371 | if ((!bq && top) && (cap = this.rules.def.exec(src))) { 372 | src = src.substring(cap[0].length); 373 | this.tokens.links[cap[1].toLowerCase()] = { 374 | href: cap[2], 375 | title: cap[3] 376 | }; 377 | continue; 378 | } 379 | 380 | // table (gfm) 381 | if (top && (cap = this.rules.table.exec(src))) { 382 | src = src.substring(cap[0].length); 383 | 384 | item = { 385 | type: 'table', 386 | header: cap[1].replace(/^ *| *\| *$/g, '').split(/ *\| */), 387 | align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */), 388 | cells: cap[3].replace(/(?: *\| *)?\n$/, '').split('\n') 389 | }; 390 | 391 | for (i = 0; i < item.align.length; i++) { 392 | if (/^ *-+: *$/.test(item.align[i])) { 393 | item.align[i] = 'right'; 394 | } else if (/^ *:-+: *$/.test(item.align[i])) { 395 | item.align[i] = 'center'; 396 | } else if (/^ *:-+ *$/.test(item.align[i])) { 397 | item.align[i] = 'left'; 398 | } else { 399 | item.align[i] = null; 400 | } 401 | } 402 | 403 | for (i = 0; i < item.cells.length; i++) { 404 | item.cells[i] = item.cells[i] 405 | .replace(/^ *\| *| *\| *$/g, '') 406 | .split(/ *\| */); 407 | } 408 | 409 | this.tokens.push(item); 410 | 411 | continue; 412 | } 413 | 414 | // top-level paragraph 415 | if (top && (cap = this.rules.paragraph.exec(src))) { 416 | src = src.substring(cap[0].length); 417 | this.tokens.push({ 418 | type: 'paragraph', 419 | text: cap[1].charAt(cap[1].length - 1) === '\n' 420 | ? cap[1].slice(0, -1) 421 | : cap[1] 422 | }); 423 | continue; 424 | } 425 | 426 | // text 427 | if (cap = this.rules.text.exec(src)) { 428 | // Top-level should never reach here. 429 | src = src.substring(cap[0].length); 430 | this.tokens.push({ 431 | type: 'text', 432 | text: cap[0] 433 | }); 434 | continue; 435 | } 436 | 437 | if (src) { 438 | throw new 439 | Error('Infinite loop on byte: ' + src.charCodeAt(0)); 440 | } 441 | } 442 | 443 | return this.tokens; 444 | }; 445 | 446 | /** 447 | * Inline-Level Grammar 448 | */ 449 | 450 | var inline = { 451 | escape: /^\\([\\`*{}\[\]()#+\-.!_>])/, 452 | autolink: /^<([^ >]+(@|:\/)[^ >]+)>/, 453 | url: noop, 454 | tag: /^|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/, 455 | link: /^!?\[(inside)\]\(href\)/, 456 | reflink: /^!?\[(inside)\]\s*\[([^\]]*)\]/, 457 | nolink: /^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/, 458 | strong: /^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/, 459 | em: /^\b_((?:[^_]|__)+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/, 460 | code: /^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)/, 461 | br: /^ {2,}\n(?!\s*$)/, 462 | del: noop, 463 | text: /^[\s\S]+?(?=[\\?(?:\s+['"]([\s\S]*?)['"])?\s*/; 468 | 469 | inline.link = replace(inline.link) 470 | ('inside', inline._inside) 471 | ('href', inline._href) 472 | (); 473 | 474 | inline.reflink = replace(inline.reflink) 475 | ('inside', inline._inside) 476 | (); 477 | 478 | /** 479 | * Normal Inline Grammar 480 | */ 481 | 482 | inline.normal = merge({}, inline); 483 | 484 | /** 485 | * Pedantic Inline Grammar 486 | */ 487 | 488 | inline.pedantic = merge({}, inline.normal, { 489 | strong: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/, 490 | em: /^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/ 491 | }); 492 | 493 | /** 494 | * GFM Inline Grammar 495 | */ 496 | 497 | inline.gfm = merge({}, inline.normal, { 498 | escape: replace(inline.escape)('])', '~|])')(), 499 | url: /^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/, 500 | del: /^~~(?=\S)([\s\S]*?\S)~~/, 501 | text: replace(inline.text) 502 | (']|', '~]|') 503 | ('|', '|https?://|') 504 | () 505 | }); 506 | 507 | /** 508 | * GFM + Line Breaks Inline Grammar 509 | */ 510 | 511 | inline.breaks = merge({}, inline.gfm, { 512 | br: replace(inline.br)('{2,}', '*')(), 513 | text: replace(inline.gfm.text)('{2,}', '*')() 514 | }); 515 | 516 | /** 517 | * Inline Lexer & Compiler 518 | */ 519 | 520 | function InlineLexer(links, options) { 521 | this.options = options || marked.defaults; 522 | this.links = links; 523 | this.rules = inline.normal; 524 | this.renderer = this.options.renderer || new Renderer; 525 | this.renderer.options = this.options; 526 | 527 | if (!this.links) { 528 | throw new 529 | Error('Tokens array requires a `links` property.'); 530 | } 531 | 532 | if (this.options.gfm) { 533 | if (this.options.breaks) { 534 | this.rules = inline.breaks; 535 | } else { 536 | this.rules = inline.gfm; 537 | } 538 | } else if (this.options.pedantic) { 539 | this.rules = inline.pedantic; 540 | } 541 | } 542 | 543 | /** 544 | * Expose Inline Rules 545 | */ 546 | 547 | InlineLexer.rules = inline; 548 | 549 | /** 550 | * Static Lexing/Compiling Method 551 | */ 552 | 553 | InlineLexer.output = function(src, links, options) { 554 | var inline = new InlineLexer(links, options); 555 | return inline.output(src); 556 | }; 557 | 558 | /** 559 | * Lexing/Compiling 560 | */ 561 | 562 | InlineLexer.prototype.output = function(src) { 563 | var out = '' 564 | , link 565 | , text 566 | , href 567 | , cap; 568 | 569 | while (src) { 570 | // escape 571 | if (cap = this.rules.escape.exec(src)) { 572 | src = src.substring(cap[0].length); 573 | out += cap[1]; 574 | continue; 575 | } 576 | 577 | // autolink 578 | if (cap = this.rules.autolink.exec(src)) { 579 | src = src.substring(cap[0].length); 580 | if (cap[2] === '@') { 581 | text = cap[1].charAt(6) === ':' 582 | ? this.mangle(cap[1].substring(7)) 583 | : this.mangle(cap[1]); 584 | href = this.mangle('mailto:') + text; 585 | } else { 586 | text = escape(cap[1]); 587 | href = text; 588 | } 589 | out += this.renderer.link(href, null, text); 590 | continue; 591 | } 592 | 593 | // url (gfm) 594 | if (!this.inLink && (cap = this.rules.url.exec(src))) { 595 | src = src.substring(cap[0].length); 596 | text = escape(cap[1]); 597 | href = text; 598 | out += this.renderer.link(href, null, text); 599 | continue; 600 | } 601 | 602 | // tag 603 | if (cap = this.rules.tag.exec(src)) { 604 | if (!this.inLink && /^/i.test(cap[0])) { 607 | this.inLink = false; 608 | } 609 | src = src.substring(cap[0].length); 610 | out += this.options.sanitize 611 | ? this.options.sanitizer 612 | ? this.options.sanitizer(cap[0]) 613 | : escape(cap[0]) 614 | : cap[0] 615 | continue; 616 | } 617 | 618 | // link 619 | if (cap = this.rules.link.exec(src)) { 620 | src = src.substring(cap[0].length); 621 | this.inLink = true; 622 | out += this.outputLink(cap, { 623 | href: cap[2], 624 | title: cap[3] 625 | }); 626 | this.inLink = false; 627 | continue; 628 | } 629 | 630 | // reflink, nolink 631 | if ((cap = this.rules.reflink.exec(src)) 632 | || (cap = this.rules.nolink.exec(src))) { 633 | src = src.substring(cap[0].length); 634 | link = (cap[2] || cap[1]).replace(/\s+/g, ' '); 635 | link = this.links[link.toLowerCase()]; 636 | if (!link || !link.href) { 637 | out += cap[0].charAt(0); 638 | src = cap[0].substring(1) + src; 639 | continue; 640 | } 641 | this.inLink = true; 642 | out += this.outputLink(cap, link); 643 | this.inLink = false; 644 | continue; 645 | } 646 | 647 | // strong 648 | if (cap = this.rules.strong.exec(src)) { 649 | src = src.substring(cap[0].length); 650 | out += this.renderer.strong(this.output(cap[2] || cap[1])); 651 | continue; 652 | } 653 | 654 | // em 655 | if (cap = this.rules.em.exec(src)) { 656 | src = src.substring(cap[0].length); 657 | out += this.renderer.em(this.output(cap[2] || cap[1])); 658 | continue; 659 | } 660 | 661 | // code 662 | if (cap = this.rules.code.exec(src)) { 663 | src = src.substring(cap[0].length); 664 | out += this.renderer.codespan(escape(cap[2], true)); 665 | continue; 666 | } 667 | 668 | // br 669 | if (cap = this.rules.br.exec(src)) { 670 | src = src.substring(cap[0].length); 671 | out += this.renderer.br(); 672 | continue; 673 | } 674 | 675 | // del (gfm) 676 | if (cap = this.rules.del.exec(src)) { 677 | src = src.substring(cap[0].length); 678 | out += this.renderer.del(this.output(cap[1])); 679 | continue; 680 | } 681 | 682 | // text 683 | if (cap = this.rules.text.exec(src)) { 684 | src = src.substring(cap[0].length); 685 | out += this.renderer.text(escape(this.smartypants(cap[0]))); 686 | continue; 687 | } 688 | 689 | if (src) { 690 | throw new 691 | Error('Infinite loop on byte: ' + src.charCodeAt(0)); 692 | } 693 | } 694 | 695 | return out; 696 | }; 697 | 698 | /** 699 | * Compile Link 700 | */ 701 | 702 | InlineLexer.prototype.outputLink = function(cap, link) { 703 | var href = escape(link.href) 704 | , title = link.title ? escape(link.title) : null; 705 | 706 | return cap[0].charAt(0) !== '!' 707 | ? this.renderer.link(href, title, this.output(cap[1])) 708 | : this.renderer.image(href, title, escape(cap[1])); 709 | }; 710 | 711 | /** 712 | * Smartypants Transformations 713 | */ 714 | 715 | InlineLexer.prototype.smartypants = function(text) { 716 | if (!this.options.smartypants) return text; 717 | return text 718 | // em-dashes 719 | .replace(/---/g, '\u2014') 720 | // en-dashes 721 | .replace(/--/g, '\u2013') 722 | // opening singles 723 | .replace(/(^|[-\u2014/(\[{"\s])'/g, '$1\u2018') 724 | // closing singles & apostrophes 725 | .replace(/'/g, '\u2019') 726 | // opening doubles 727 | .replace(/(^|[-\u2014/(\[{\u2018\s])"/g, '$1\u201c') 728 | // closing doubles 729 | .replace(/"/g, '\u201d') 730 | // ellipses 731 | .replace(/\.{3}/g, '\u2026'); 732 | }; 733 | 734 | /** 735 | * Mangle Links 736 | */ 737 | 738 | InlineLexer.prototype.mangle = function(text) { 739 | if (!this.options.mangle) return text; 740 | var out = '' 741 | , l = text.length 742 | , i = 0 743 | , ch; 744 | 745 | for (; i < l; i++) { 746 | ch = text.charCodeAt(i); 747 | if (Math.random() > 0.5) { 748 | ch = 'x' + ch.toString(16); 749 | } 750 | out += '&#' + ch + ';'; 751 | } 752 | 753 | return out; 754 | }; 755 | 756 | /** 757 | * Renderer 758 | */ 759 | 760 | function Renderer(options) { 761 | this.options = options || {}; 762 | } 763 | 764 | Renderer.prototype.code = function(code, lang, escaped) { 765 | if (this.options.highlight) { 766 | var out = this.options.highlight(code, lang); 767 | if (out != null && out !== code) { 768 | escaped = true; 769 | code = out; 770 | } 771 | } 772 | 773 | if (!lang) { 774 | return '
'
 775 |       + (escaped ? code : escape(code, true))
 776 |       + '\n
'; 777 | } 778 | 779 | return '
'
 783 |     + (escaped ? code : escape(code, true))
 784 |     + '\n
\n'; 785 | }; 786 | 787 | Renderer.prototype.blockquote = function(quote) { 788 | return '
\n' + quote + '
\n'; 789 | }; 790 | 791 | Renderer.prototype.html = function(html) { 792 | return html; 793 | }; 794 | 795 | Renderer.prototype.heading = function(text, level, raw) { 796 | return '' 802 | + text 803 | + '\n'; 806 | }; 807 | 808 | Renderer.prototype.hr = function() { 809 | return this.options.xhtml ? '
\n' : '
\n'; 810 | }; 811 | 812 | Renderer.prototype.list = function(body, ordered) { 813 | var type = ordered ? 'ol' : 'ul'; 814 | return '<' + type + '>\n' + body + '\n'; 815 | }; 816 | 817 | Renderer.prototype.listitem = function(text) { 818 | return '
  • ' + text + '
  • \n'; 819 | }; 820 | 821 | Renderer.prototype.paragraph = function(text) { 822 | return '

    ' + text + '

    \n'; 823 | }; 824 | 825 | Renderer.prototype.table = function(header, body) { 826 | return '\n' 827 | + '\n' 828 | + header 829 | + '\n' 830 | + '\n' 831 | + body 832 | + '\n' 833 | + '
    \n'; 834 | }; 835 | 836 | Renderer.prototype.tablerow = function(content) { 837 | return '\n' + content + '\n'; 838 | }; 839 | 840 | Renderer.prototype.tablecell = function(content, flags) { 841 | var type = flags.header ? 'th' : 'td'; 842 | var tag = flags.align 843 | ? '<' + type + ' style="text-align:' + flags.align + '">' 844 | : '<' + type + '>'; 845 | return tag + content + '\n'; 846 | }; 847 | 848 | // span level renderer 849 | Renderer.prototype.strong = function(text) { 850 | return '' + text + ''; 851 | }; 852 | 853 | Renderer.prototype.em = function(text) { 854 | return '' + text + ''; 855 | }; 856 | 857 | Renderer.prototype.codespan = function(text) { 858 | return '' + text + ''; 859 | }; 860 | 861 | Renderer.prototype.br = function() { 862 | return this.options.xhtml ? '
    ' : '
    '; 863 | }; 864 | 865 | Renderer.prototype.del = function(text) { 866 | return '' + text + ''; 867 | }; 868 | 869 | Renderer.prototype.link = function(href, title, text) { 870 | if (this.options.sanitize) { 871 | try { 872 | var prot = decodeURIComponent(unescape(href)) 873 | .replace(/[^\w:]/g, '') 874 | .toLowerCase(); 875 | } catch (e) { 876 | return ''; 877 | } 878 | if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0) { 879 | return ''; 880 | } 881 | } 882 | var out = '
    '; 887 | return out; 888 | }; 889 | 890 | Renderer.prototype.image = function(href, title, text) { 891 | var out = '' + text + '' : '>'; 896 | return out; 897 | }; 898 | 899 | Renderer.prototype.text = function(text) { 900 | return text; 901 | }; 902 | 903 | /** 904 | * Parsing & Compiling 905 | */ 906 | 907 | function Parser(options) { 908 | this.tokens = []; 909 | this.token = null; 910 | this.options = options || marked.defaults; 911 | this.options.renderer = this.options.renderer || new Renderer; 912 | this.renderer = this.options.renderer; 913 | this.renderer.options = this.options; 914 | } 915 | 916 | /** 917 | * Static Parse Method 918 | */ 919 | 920 | Parser.parse = function(src, options, renderer) { 921 | var parser = new Parser(options, renderer); 922 | return parser.parse(src); 923 | }; 924 | 925 | /** 926 | * Parse Loop 927 | */ 928 | 929 | Parser.prototype.parse = function(src) { 930 | this.inline = new InlineLexer(src.links, this.options, this.renderer); 931 | this.tokens = src.reverse(); 932 | 933 | var out = ''; 934 | while (this.next()) { 935 | out += this.tok(); 936 | } 937 | 938 | return out; 939 | }; 940 | 941 | /** 942 | * Next Token 943 | */ 944 | 945 | Parser.prototype.next = function() { 946 | return this.token = this.tokens.pop(); 947 | }; 948 | 949 | /** 950 | * Preview Next Token 951 | */ 952 | 953 | Parser.prototype.peek = function() { 954 | return this.tokens[this.tokens.length - 1] || 0; 955 | }; 956 | 957 | /** 958 | * Parse Text Tokens 959 | */ 960 | 961 | Parser.prototype.parseText = function() { 962 | var body = this.token.text; 963 | 964 | while (this.peek().type === 'text') { 965 | body += '\n' + this.next().text; 966 | } 967 | 968 | return this.inline.output(body); 969 | }; 970 | 971 | /** 972 | * Parse Current Token 973 | */ 974 | 975 | Parser.prototype.tok = function() { 976 | switch (this.token.type) { 977 | case 'space': { 978 | return ''; 979 | } 980 | case 'hr': { 981 | return this.renderer.hr(); 982 | } 983 | case 'heading': { 984 | return this.renderer.heading( 985 | this.inline.output(this.token.text), 986 | this.token.depth, 987 | this.token.text); 988 | } 989 | case 'code': { 990 | return this.renderer.code(this.token.text, 991 | this.token.lang, 992 | this.token.escaped); 993 | } 994 | case 'table': { 995 | var header = '' 996 | , body = '' 997 | , i 998 | , row 999 | , cell 1000 | , flags 1001 | , j; 1002 | 1003 | // header 1004 | cell = ''; 1005 | for (i = 0; i < this.token.header.length; i++) { 1006 | flags = { header: true, align: this.token.align[i] }; 1007 | cell += this.renderer.tablecell( 1008 | this.inline.output(this.token.header[i]), 1009 | { header: true, align: this.token.align[i] } 1010 | ); 1011 | } 1012 | header += this.renderer.tablerow(cell); 1013 | 1014 | for (i = 0; i < this.token.cells.length; i++) { 1015 | row = this.token.cells[i]; 1016 | 1017 | cell = ''; 1018 | for (j = 0; j < row.length; j++) { 1019 | cell += this.renderer.tablecell( 1020 | this.inline.output(row[j]), 1021 | { header: false, align: this.token.align[j] } 1022 | ); 1023 | } 1024 | 1025 | body += this.renderer.tablerow(cell); 1026 | } 1027 | return this.renderer.table(header, body); 1028 | } 1029 | case 'blockquote_start': { 1030 | var body = ''; 1031 | 1032 | while (this.next().type !== 'blockquote_end') { 1033 | body += this.tok(); 1034 | } 1035 | 1036 | return this.renderer.blockquote(body); 1037 | } 1038 | case 'list_start': { 1039 | var body = '' 1040 | , ordered = this.token.ordered; 1041 | 1042 | while (this.next().type !== 'list_end') { 1043 | body += this.tok(); 1044 | } 1045 | 1046 | return this.renderer.list(body, ordered); 1047 | } 1048 | case 'list_item_start': { 1049 | var body = ''; 1050 | 1051 | while (this.next().type !== 'list_item_end') { 1052 | body += this.token.type === 'text' 1053 | ? this.parseText() 1054 | : this.tok(); 1055 | } 1056 | 1057 | return this.renderer.listitem(body); 1058 | } 1059 | case 'loose_item_start': { 1060 | var body = ''; 1061 | 1062 | while (this.next().type !== 'list_item_end') { 1063 | body += this.tok(); 1064 | } 1065 | 1066 | return this.renderer.listitem(body); 1067 | } 1068 | case 'html': { 1069 | var html = !this.token.pre && !this.options.pedantic 1070 | ? this.inline.output(this.token.text) 1071 | : this.token.text; 1072 | return this.renderer.html(html); 1073 | } 1074 | case 'paragraph': { 1075 | return this.renderer.paragraph(this.inline.output(this.token.text)); 1076 | } 1077 | case 'text': { 1078 | return this.renderer.paragraph(this.parseText()); 1079 | } 1080 | } 1081 | }; 1082 | 1083 | /** 1084 | * Helpers 1085 | */ 1086 | 1087 | function escape(html, encode) { 1088 | return html 1089 | .replace(!encode ? /&(?!#?\w+;)/g : /&/g, '&') 1090 | .replace(//g, '>') 1092 | .replace(/"/g, '"') 1093 | .replace(/'/g, '''); 1094 | } 1095 | 1096 | function unescape(html) { 1097 | // explicitly match decimal, hex, and named HTML entities 1098 | return html.replace(/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/g, function(_, n) { 1099 | n = n.toLowerCase(); 1100 | if (n === 'colon') return ':'; 1101 | if (n.charAt(0) === '#') { 1102 | return n.charAt(1) === 'x' 1103 | ? String.fromCharCode(parseInt(n.substring(2), 16)) 1104 | : String.fromCharCode(+n.substring(1)); 1105 | } 1106 | return ''; 1107 | }); 1108 | } 1109 | 1110 | function replace(regex, opt) { 1111 | regex = regex.source; 1112 | opt = opt || ''; 1113 | return function self(name, val) { 1114 | if (!name) return new RegExp(regex, opt); 1115 | val = val.source || val; 1116 | val = val.replace(/(^|[^\[])\^/g, '$1'); 1117 | regex = regex.replace(name, val); 1118 | return self; 1119 | }; 1120 | } 1121 | 1122 | function noop() {} 1123 | noop.exec = noop; 1124 | 1125 | function merge(obj) { 1126 | var i = 1 1127 | , target 1128 | , key; 1129 | 1130 | for (; i < arguments.length; i++) { 1131 | target = arguments[i]; 1132 | for (key in target) { 1133 | if (Object.prototype.hasOwnProperty.call(target, key)) { 1134 | obj[key] = target[key]; 1135 | } 1136 | } 1137 | } 1138 | 1139 | return obj; 1140 | } 1141 | 1142 | 1143 | /** 1144 | * Marked 1145 | */ 1146 | 1147 | function marked(src, opt, callback) { 1148 | if (callback || typeof opt === 'function') { 1149 | if (!callback) { 1150 | callback = opt; 1151 | opt = null; 1152 | } 1153 | 1154 | opt = merge({}, marked.defaults, opt || {}); 1155 | 1156 | var highlight = opt.highlight 1157 | , tokens 1158 | , pending 1159 | , i = 0; 1160 | 1161 | try { 1162 | tokens = Lexer.lex(src, opt) 1163 | } catch (e) { 1164 | return callback(e); 1165 | } 1166 | 1167 | pending = tokens.length; 1168 | 1169 | var done = function(err) { 1170 | if (err) { 1171 | opt.highlight = highlight; 1172 | return callback(err); 1173 | } 1174 | 1175 | var out; 1176 | 1177 | try { 1178 | out = Parser.parse(tokens, opt); 1179 | } catch (e) { 1180 | err = e; 1181 | } 1182 | 1183 | opt.highlight = highlight; 1184 | 1185 | return err 1186 | ? callback(err) 1187 | : callback(null, out); 1188 | }; 1189 | 1190 | if (!highlight || highlight.length < 3) { 1191 | return done(); 1192 | } 1193 | 1194 | delete opt.highlight; 1195 | 1196 | if (!pending) return done(); 1197 | 1198 | for (; i < tokens.length; i++) { 1199 | (function(token) { 1200 | if (token.type !== 'code') { 1201 | return --pending || done(); 1202 | } 1203 | return highlight(token.text, token.lang, function(err, code) { 1204 | if (err) return done(err); 1205 | if (code == null || code === token.text) { 1206 | return --pending || done(); 1207 | } 1208 | token.text = code; 1209 | token.escaped = true; 1210 | --pending || done(); 1211 | }); 1212 | })(tokens[i]); 1213 | } 1214 | 1215 | return; 1216 | } 1217 | try { 1218 | if (opt) opt = merge({}, marked.defaults, opt); 1219 | return Parser.parse(Lexer.lex(src, opt), opt); 1220 | } catch (e) { 1221 | e.message += '\nPlease report this to https://github.com/chjj/marked.'; 1222 | if ((opt || marked.defaults).silent) { 1223 | return '

    An error occured:

    '
    1224 |         + escape(e.message + '', true)
    1225 |         + '
    '; 1226 | } 1227 | throw e; 1228 | } 1229 | } 1230 | 1231 | /** 1232 | * Options 1233 | */ 1234 | 1235 | marked.options = 1236 | marked.setOptions = function(opt) { 1237 | merge(marked.defaults, opt); 1238 | return marked; 1239 | }; 1240 | 1241 | marked.defaults = { 1242 | gfm: true, 1243 | tables: true, 1244 | breaks: false, 1245 | pedantic: false, 1246 | sanitize: false, 1247 | sanitizer: null, 1248 | mangle: true, 1249 | smartLists: false, 1250 | silent: false, 1251 | highlight: null, 1252 | langPrefix: 'lang-', 1253 | smartypants: false, 1254 | headerPrefix: '', 1255 | renderer: new Renderer, 1256 | xhtml: false 1257 | }; 1258 | 1259 | /** 1260 | * Expose 1261 | */ 1262 | 1263 | marked.Parser = Parser; 1264 | marked.parser = Parser.parse; 1265 | 1266 | marked.Renderer = Renderer; 1267 | 1268 | marked.Lexer = Lexer; 1269 | marked.lexer = Lexer.lex; 1270 | 1271 | marked.InlineLexer = InlineLexer; 1272 | marked.inlineLexer = InlineLexer.output; 1273 | 1274 | marked.parse = marked; 1275 | 1276 | if (typeof module !== 'undefined' && typeof exports === 'object') { 1277 | module.exports = marked; 1278 | } else if (typeof define === 'function' && define.amd) { 1279 | define(function() { return marked; }); 1280 | } else { 1281 | this.marked = marked; 1282 | } 1283 | 1284 | }).call(function() { 1285 | return this || (typeof window !== 'undefined' ? window : global); 1286 | }()); 1287 | -------------------------------------------------------------------------------- /tmpl/assets/jquery-custom.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery v3.0.0 -css,-css/addGetHookIf,-css/adjustCSS,-css/curCSS,-css/hiddenVisibleSelectors,-css/showHide,-effects,-effects/Tween,-effects/animatedSelector,-css/support,-css/var/cssExpand,-css/var/getStyles,-css/var/isHiddenWithinTree,-css/var/rmargin,-css/var/rnumnonpx,-css/var/swap,-dimensions,-offset,-deprecated,-event/alias,-wrap | (c) jQuery Foundation | jquery.org/license */ 2 | !function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.0.0",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:f.call(this)},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:h,sort:c.sort,splice:c.splice},r.extend=r.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||r.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(r.isPlainObject(d)||(e=r.isArray(d)))?(e?(e=!1,f=c&&r.isArray(c)?c:[]):f=c&&r.isPlainObject(c)?c:{},g[b]=r.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},r.extend({expando:"jQuery"+(q+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===r.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=r.type(a);return("number"===b||"string"===b)&&!isNaN(a-parseFloat(a))},isPlainObject:function(a){var b,c;return a&&"[object Object]"===k.call(a)?(b=e(a))?(c=l.call(b,"constructor")&&b.constructor,"function"==typeof c&&m.call(c)===n):!0:!1},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?j[k.call(a)]||"object":typeof a},globalEval:function(a){p(a)},camelCase:function(a){return a.replace(t,"ms-").replace(u,v)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(w(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(s,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(w(Object(a))?r.merge(c,"string"==typeof a?[a]:a):h.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:i.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,f=0,h=[];if(w(a))for(d=a.length;d>f;f++)e=b(a[f],f,c),null!=e&&h.push(e);else for(f in a)e=b(a[f],f,c),null!=e&&h.push(e);return g.apply([],h)},guid:1,proxy:function(a,b){var c,d,e;return"string"==typeof b&&(c=a[b],b=a,a=c),r.isFunction(a)?(d=f.call(arguments,2),e=function(){return a.apply(b||this,d.concat(f.call(arguments)))},e.guid=a.guid=a.guid||r.guid++,e):void 0},now:Date.now,support:o}),"function"==typeof Symbol&&(r.fn[Symbol.iterator]=c[Symbol.iterator]),r.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){j["[object "+b+"]"]=b.toLowerCase()});function w(a){var b=!!a&&"length"in a&&a.length,c=r.type(a);return"function"===c||r.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\x00-\\xa0])+",M="\\["+K+"*("+L+")(?:"+K+"*([*^$|!~]?=)"+K+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+L+"))|)"+K+"*\\]",N=":("+L+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+M+")*)|.*)\\)|)",O=new RegExp(K+"+","g"),P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g,ca=function(a,b){return b?"\x00"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"label"in b&&b.disabled===a||"form"in b&&b.disabled===a||"form"in b&&b.disabled===!1&&(b.isDisabled===a||b.isDisabled!==!a&&("label"in b||!ea(b))!==a)}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="
    ",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[0>c?c+b:c]}),even:pa(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:pa(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:pa(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function ta(a,b,c){var d=b.dir,e=b.next,f=e||d,g=c&&"parentNode"===f,h=x++;return b.first?function(b,c,e){while(b=b[d])if(1===b.nodeType||g)return a(b,c,e)}:function(b,c,i){var j,k,l,m=[w,h];if(i){while(b=b[d])if((1===b.nodeType||g)&&a(b,c,i))return!0}else while(b=b[d])if(1===b.nodeType||g)if(l=b[u]||(b[u]={}),k=l[b.uniqueID]||(l[b.uniqueID]={}),e&&e===b.nodeName.toLowerCase())b=b[d]||b;else{if((j=k[f])&&j[0]===w&&j[1]===h)return m[2]=j[2];if(k[f]=m,m[2]=a(b,c,i))return!0}}}function ua(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;e>d;d++)ga(a,b[d],c);return c}function wa(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function xa(a,b,c,d,e,f){return d&&!d[u]&&(d=xa(d)),e&&!e[u]&&(e=xa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||va(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:wa(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=wa(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ta(ua(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return xa(i>1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,e>i&&ya(a.slice(i,e)),f>e&&ya(a=a.slice(e)),f>e&&sa(a))}m.push(c)}return ua(m)}function za(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(_,aa),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=V.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(_,aa),$.test(j[0].type)&&qa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&sa(j),!a)return G.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||$.test(a)&&qa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext,B=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,C=/^.[^:#\[\.,]*$/;function D(a,b,c){if(r.isFunction(b))return r.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return r.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(C.test(b))return r.filter(b,a,c);b=r.filter(b,a)}return r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType})}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;d>b;b++)if(r.contains(e[b],this))return!0}));for(c=this.pushStack([]),b=0;d>b;b++)r.find(a,e[b],c);return d>1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(D(this,a||[],!1))},not:function(a){return this.pushStack(D(this,a||[],!0))},is:function(a){return!!D(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var E,F=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,G=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||E,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:F.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),B.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};G.prototype=r.fn,E=r(d);var H=/^(?:parents|prev(?:Until|All))/,I={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(r.contains(this,b[a]))return!0})},closest:function(a,b){var c,d=0,e=this.length,f=[],g="string"!=typeof a&&r(a);if(!A.test(a))for(;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function J(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return J(a,"nextSibling")},prev:function(a){return J(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return a.contentDocument||r.merge([],a.childNodes)}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(I[a]||r.uniqueSort(e),H.test(a)&&e.reverse()),this.pushStack(e)}});var K=/\S+/g;function L(a){var b={};return r.each(a.match(K)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?L(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function M(a){return a}function N(a){throw a}function O(a,b,c){var d;try{a&&r.isFunction(d=a.promise)?d.call(a).done(b).fail(c):a&&r.isFunction(d=a.then)?d.call(a,b,c):b.call(void 0,a)}catch(a){c.call(void 0,a)}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(f>b)){if(a=d.apply(h,i),a===c.promise())throw new TypeError("Thenable self-resolution");j=a&&("object"==typeof a||"function"==typeof a)&&a.then,r.isFunction(j)?e?j.call(a,g(f,c,M,e),g(f,c,N,e)):(f++,j.call(a,g(f,c,M,e),g(f,c,N,e),g(f,c,M,c.notifyWith))):(d!==M&&(h=void 0,i=[a]),(e||c.resolveWith)(h,i))}},k=e?j:function(){try{j()}catch(a){r.Deferred.exceptionHook&&r.Deferred.exceptionHook(a,k.stackTrace),b+1>=f&&(d!==N&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:M,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:M)),c[2][3].add(g(0,a,r.isFunction(d)?d:N))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(1>=b&&(O(a,g.done(h(c)).resolve,g.reject),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)O(e[c],h(c),g.reject);return g.promise()}});var P=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&P.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)};var Q=r.Deferred();r.fn.ready=function(a){return Q.then(a),this},r.extend({isReady:!1,readyWait:1,holdReady:function(a){a?r.readyWait++:r.ready(!0)},ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||Q.resolveWith(d,[r]))}}),r.ready.then=Q.then;function R(){d.removeEventListener("DOMContentLoaded",R),a.removeEventListener("load",R),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",R),a.addEventListener("load",R));var S=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)S(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){ 3 | return j.call(r(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},T=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function U(){this.expando=r.expando+U.uid++}U.uid=1,U.prototype={cache:function(a){var b=a[this.expando];return b||(b={},T(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if("string"==typeof b)e[r.camelCase(b)]=c;else for(d in b)e[r.camelCase(d)]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][r.camelCase(b)]},access:function(a,b,c){return void 0===b||b&&"string"==typeof b&&void 0===c?this.get(a,b):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d=a[this.expando];if(void 0!==d){if(void 0!==b){r.isArray(b)?b=b.map(r.camelCase):(b=r.camelCase(b),b=b in d?[b]:b.match(K)||[]),c=b.length;while(c--)delete d[b[c]]}(void 0===b||r.isEmptyObject(d))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!r.isEmptyObject(b)}};var V=new U,W=new U,X=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Y=/[A-Z]/g;function Z(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(Y,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:X.test(c)?JSON.parse(c):c}catch(e){}W.set(a,b,c)}else c=void 0;return c}r.extend({hasData:function(a){return W.hasData(a)||V.hasData(a)},data:function(a,b,c){return W.access(a,b,c)},removeData:function(a,b){W.remove(a,b)},_data:function(a,b,c){return V.access(a,b,c)},_removeData:function(a,b){V.remove(a,b)}}),r.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=W.get(f),1===f.nodeType&&!V.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=r.camelCase(d.slice(5)),Z(f,d,e[d])));V.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){W.set(this,a)}):S(this,function(b){var c;if(f&&void 0===b){if(c=W.get(f,a),void 0!==c)return c;if(c=Z(f,a),void 0!==c)return c}else this.each(function(){W.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){W.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=V.get(a,b),c&&(!d||r.isArray(c)?d=V.access(a,b,r.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return V.get(a,c)||V.access(a,c,{empty:r.Callbacks("once memory").add(function(){V.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length\x20\t\r\n\f]+)/i,ca=/^$|\/(?:java|ecma)script/i,da={option:[1,""],thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};da.optgroup=da.option,da.tbody=da.tfoot=da.colgroup=da.caption=da.thead,da.th=da.td;function ea(a,b){var c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&r.nodeName(a,b)?r.merge([a],c):c}function fa(a,b){for(var c=0,d=a.length;d>c;c++)V.set(a[c],"globalEval",!b||V.get(b[c],"globalEval"))}var ga=/<|&#?\w+;/;function ha(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],n=0,o=a.length;o>n;n++)if(f=a[n],f||0===f)if("object"===r.type(f))r.merge(m,f.nodeType?[f]:f);else if(ga.test(f)){g=g||l.appendChild(b.createElement("div")),h=(ba.exec(f)||["",""])[1].toLowerCase(),i=da[h]||da._default,g.innerHTML=i[1]+r.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;r.merge(m,g.childNodes),g=l.firstChild,g.textContent=""}else m.push(b.createTextNode(f));l.textContent="",n=0;while(f=m[n++])if(d&&r.inArray(f,d)>-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=ea(l.appendChild(f),"script"),j&&fa(g),c){k=0;while(f=g[k++])ca.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var ia=d.documentElement,ja=/^key/,ka=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,la=/^([^.]*)(?:\.(.+)|)/;function ma(){return!0}function na(){return!1}function oa(){try{return d.activeElement}catch(a){}}function pa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)pa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=na;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=V.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(ia,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(K)||[""],j=b.length;while(j--)h=la.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=V.hasData(a)&&V.get(a);if(q&&(i=q.events)){b=(b||"").match(K)||[""],j=b.length;while(j--)if(h=la.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&V.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(V.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;cc;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?r(e,this).index(i)>-1:r.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h\x20\t\r\n\f]*)[^>]*)\/>/gi,ra=/\s*$/g;function va(a,b){return r.nodeName(a,"table")&&r.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a:a}function wa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function xa(a){var b=ta.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function ya(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(V.hasData(a)&&(f=V.access(a),g=V.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)r.event.add(b,e,j[e][c])}W.hasData(a)&&(h=W.access(a),i=r.extend({},h),W.set(b,i))}}function za(a,b){var c=b.nodeName.toLowerCase();"input"===c&&aa.test(a.type)?b.checked=a.checked:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}function Aa(a,b,c,d){b=g.apply([],b);var e,f,h,i,j,k,l=0,m=a.length,n=m-1,q=b[0],s=r.isFunction(q);if(s||m>1&&"string"==typeof q&&!o.checkClone&&sa.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Aa(f,b,c,d)});if(m&&(e=ha(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(ea(e,"script"),wa),i=h.length;m>l;l++)j=e,l!==n&&(j=r.clone(j,!0,!0),i&&r.merge(h,ea(j,"script"))),c.call(a[l],j,l);if(i)for(k=h[h.length-1].ownerDocument,r.map(h,xa),l=0;i>l;l++)j=h[l],ca.test(j.type||"")&&!V.access(j,"globalEval")&&r.contains(k,j)&&(j.src?r._evalUrl&&r._evalUrl(j.src):p(j.textContent.replace(ua,""),k))}return a}function Ba(a,b,c){for(var d,e=b?r.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||r.cleanData(ea(d)),d.parentNode&&(c&&r.contains(d.ownerDocument,d)&&fa(ea(d,"script")),d.parentNode.removeChild(d));return a}r.extend({htmlPrefilter:function(a){return a.replace(qa,"<$1>")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=ea(h),f=ea(a),d=0,e=f.length;e>d;d++)za(f[d],g[d]);if(b)if(c)for(f=f||ea(a),g=g||ea(h),d=0,e=f.length;e>d;d++)ya(f[d],g[d]);else ya(a,h);return g=ea(h,"script"),g.length>0&&fa(g,!i&&ea(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(T(c)){if(b=c[V.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[V.expando]=void 0}c[W.expando]&&(c[W.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ba(this,a,!0)},remove:function(a){return Ba(this,a)},text:function(a){return S(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Aa(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=va(this,a);b.appendChild(a)}})},prepend:function(){return Aa(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=va(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Aa(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Aa(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(ea(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return S(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!ra.test(a)&&!da[(ba.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(r.cleanData(ea(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Aa(this,arguments,function(b){var c=this.parentNode;r.inArray(this,a)<0&&(r.cleanData(ea(this)),c&&c.replaceChild(b,this))},a)}}),r.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){r.fn[a]=function(a){for(var c,d=[],e=r(a),f=e.length-1,g=0;f>=g;g++)c=g===f?this:this.clone(!0),r(e[g])[b](c),h.apply(d,c.get());return this.pushStack(d)}}),r.fn.delay=function(b,c){return b=r.fx?r.fx.speeds[b]||b:b,c=c||"fx",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a=d.createElement("input"),b=d.createElement("select"),c=b.appendChild(d.createElement("option"));a.type="checkbox",o.checkOn=""!==a.value,o.optSelected=c.selected,a=d.createElement("input"),a.value="t",a.type="radio",o.radioValue="t"===a.value}();var Ca,Da=r.expr.attrHandle;r.fn.extend({attr:function(a,b){return S(this,r.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?Ca:void 0)),void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b),null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&r.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(K);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),Ca={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=Da[b]||r.find.attr;Da[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=Da[g],Da[g]=e,e=null!=c(a,b,d)?g:null,Da[g]=f),e}});var Ea=/^(?:input|select|textarea|button)$/i,Fa=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return S(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):Ea.test(a.nodeName)||Fa.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});var Ga=/[\t\r\n\f]/g;function Ha(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,Ha(this)))});if("string"==typeof a&&a){b=a.match(K)||[];while(c=this[i++])if(e=Ha(c),d=1===c.nodeType&&(" "+e+" ").replace(Ga," ")){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=r.trim(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,Ha(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(K)||[];while(c=this[i++])if(e=Ha(c),d=1===c.nodeType&&(" "+e+" ").replace(Ga," ")){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=r.trim(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,Ha(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(K)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=Ha(this),b&&V.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":V.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+Ha(c)+" ").replace(Ga," ").indexOf(b)>-1)return!0;return!1}});var Ia=/\r/g,Ja=/[\x20\t\r\n\f]+/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":r.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(Ia,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:r.trim(r.text(a)).replace(Ja," ")}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],(c.selected||i===e)&&!c.disabled&&(!c.parentNode.disabled||!r.nodeName(c.parentNode,"optgroup"))){if(b=r(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=r.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=r.inArray(r.valHooks.option.get(d),f)>-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){return r.isArray(b)?a.checked=r.inArray(r(a).val(),b)>-1:void 0}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var Ka=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!Ka.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,Ka.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(V.get(h,"events")||{})[b.type]&&V.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&T(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!T(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?r.event.trigger(a,b,c,!0):void 0}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=V.access(d,b);e||d.addEventListener(a,c,!0),V.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=V.access(d,b)-1;e?V.access(d,b,e):(d.removeEventListener(a,c,!0),V.remove(d,b))}}});var La=a.location,Ma=r.now(),Na=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var Oa=/\[\]$/,Pa=/\r?\n/g,Qa=/^(?:submit|button|image|reset|file)$/i,Ra=/^(?:input|select|textarea|keygen)/i;function Sa(a,b,c,d){var e;if(r.isArray(b))r.each(b,function(b,e){c||Oa.test(a)?d(a,e):Sa(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)Sa(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(r.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)Sa(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&Ra.test(this.nodeName)&&!Qa.test(a)&&(this.checked||!aa.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:r.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(Pa,"\r\n")}}):{name:b.name,value:c.replace(Pa,"\r\n")}}).get()}});var Ta=/%20/g,Ua=/#.*$/,Va=/([?&])_=[^&]*/,Wa=/^(.*?):[ \t]*([^\r\n]*)$/gm,Xa=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ya=/^(?:GET|HEAD)$/,Za=/^\/\//,$a={},_a={},ab="*/".concat("*"),bb=d.createElement("a");bb.href=La.href;function cb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(K)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function db(a,b,c,d){var e={},f=a===_a;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function eb(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function fb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function gb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:La.href,type:"GET",isLocal:Xa.test(La.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":ab,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?eb(eb(a,r.ajaxSettings),b):eb(r.ajaxSettings,a)},ajaxPrefilter:cb($a),ajaxTransport:cb(_a),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Wa.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||La.href)+"").replace(Za,La.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(K)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=bb.protocol+"//"+bb.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),db($a,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Ya.test(o.type),f=o.url.replace(Ua,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(Ta,"+")):(n=o.url.slice(f.length),o.data&&(f+=(Na.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Va,""),n=(Na.test(f)?"&":"?")+"_="+Ma++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+ab+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=db(_a,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&300>b||304===b,d&&(v=fb(o,y,d)),v=gb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",0>b&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d, 4 | d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var hb={0:200,1223:204},ib=r.ajaxSettings.xhr();o.cors=!!ib&&"withCredentials"in ib,o.ajax=ib=!!ib,r.ajaxTransport(function(b){var c,d;return o.cors||ib&&!b.crossDomain?{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(hb[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}:void 0}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r("