diff --git a/src/event/impl.go b/src/event/impl.go
index 705f656..5d5e285 100644
--- a/src/event/impl.go
+++ b/src/event/impl.go
@@ -29,6 +29,34 @@ func (e *Event) MarshalFights(fights []*Fight) {
e.Fights = string(buf)
}
+func (e *Event) HasEmptyFights() bool {
+ fights := e.UnmarshalFights()
+
+ if len(fights) == 0 {
+ return true
+ }
+
+ for _, f := range fights {
+ if f.IsEmpty() {
+ return true
+ }
+ }
+
+ return false
+}
+
+func (f *Fight) IsEmpty() bool {
+ return f.FighterA.IsEmpty() && f.FighterB.IsEmpty()
+}
+
+func (f *Fighter) IsEmpty() bool {
+ return isEmpty(f.Country) && isEmpty(f.Image) && isEmpty(f.Link) && isEmpty(f.Name)
+}
+
+func isEmpty(s string) bool {
+ return len(s) == 0
+}
+
const upsertEvents = `-- name: UpsertEvents :exec
INSERT INTO
event (
diff --git a/src/main.go b/src/main.go
index c49ecdc..e7dd96f 100644
--- a/src/main.go
+++ b/src/main.go
@@ -56,7 +56,8 @@ func main() {
cmd := flag.Args()[0]
client := NewScraperClient()
- queries, err := InitDb("db.sqlite")
+ db, err := InitDb("db.sqlite")
+
if err != nil {
slog.Error("Failed initializing database", "error", err)
return
@@ -66,14 +67,14 @@ func main() {
case "runserver":
if !*noscraping {
slog.Debug("Starting scraping loop")
- go ScrapeEventsLoop(queries, client, !*notapology)
+ go ScrapeEventsLoop(db, client, !*notapology)
}
- err = RunServer(*host, queries)
+ err = RunServer(*host, db)
if err != nil {
slog.Error("Error starting web server:", "error", err)
}
case "scrape":
- ScrapeEvents(queries, client, !*notapology)
+ ScrapeEvents(db, client, !*notapology)
default:
fmt.Print(POSITIONAL_ARGS_HELP)
os.Exit(1)
diff --git a/src/orchestrator.go b/src/orchestrator.go
index 1efb059..0286c50 100644
--- a/src/orchestrator.go
+++ b/src/orchestrator.go
@@ -9,43 +9,49 @@ import (
type Scraper func(ClientScraper) (*[]*event.Event, error)
-func ScrapeEventsLoop(q *event.Queries, client ClientScraper, tapology bool) {
+func ScrapeEventsLoop(db *event.Queries, client ClientScraper, tapology bool) {
for {
time.Sleep(time.Duration(1) * time.Hour)
slog.Debug("Running hourly scraper")
- ScrapeEvents(q, client, tapology)
+ ScrapeEvents(db, client, tapology)
}
}
-func ScrapeEvents(q *event.Queries, client ClientScraper, tapology bool) {
- events := []*event.Event{}
+func ScrapeEvents(db *event.Queries, client ClientScraper, tapology bool) {
+ allEvents := []*event.Event{}
scrapers := []Scraper{
ScrapeONE,
ScrapeUFC,
}
for _, scraper := range scrapers {
- e, err := scraper(client)
+ events, err := scraper(client)
+
if err != nil {
slog.Error("Error scraping events", "error", err)
- } else {
- events = append(events, *e...)
+ continue
+ }
+
+ for _, e := range *events {
+ if !e.HasEmptyFights() {
+ allEvents = append(allEvents, e)
+ }
}
}
if tapology {
- UpdateTapology(q, client, &events)
+ UpdateTapology(db, client, &allEvents)
}
- if len(events) > 0 {
- err := q.UpsertEvents(context.Background(), events)
+ if len(allEvents) > 0 {
+ err := db.UpsertEvents(context.Background(), allEvents)
if err != nil {
slog.Error("Failed updating events in database", "error", err)
}
}
}
-func UpdateTapology(q *event.Queries, client ClientScraper, events *[]*event.Event) {
+func UpdateTapology(db *event.Queries, client ClientScraper, events *[]*event.Event) {
err := SetTapologyCSRF(client)
if err != nil {
slog.Error("Failed settings tapology CSRF", "error", err)
@@ -53,33 +59,41 @@ func UpdateTapology(q *event.Queries, client ClientScraper, events *[]*event.Eve
for _, e := range *events {
fights := e.UnmarshalFights()
+
for _, f := range fights {
fighters := []*event.Fighter{
f.FighterA,
f.FighterB,
}
+
for _, ff := range fighters {
slog.Debug("Getting tapology link from database", "name", ff.Name)
- tapology, err := q.GetTapology(context.Background(), ff.Name)
- if err != nil {
- slog.Error("Failed getting tapology from database", "name", ff.Name, "error", err)
- link, err := GetTapologyLink(client, ff.Name)
- if err != nil {
- slog.Error("Failed getting tapology from site", "name", ff.Name, "error", err)
- } else {
- slog.Debug("Got new tapology link", "name", ff.Name, "link", link)
- err := q.CreateTapology(context.Background(), event.CreateTapologyParams{Name: ff.Name, Url: link})
- if err != nil {
- slog.Error("Failed creating tapology in database", "name", ff.Name, "error", err)
- }
- ff.Link = link
- }
- time.Sleep(time.Duration(5) * time.Second)
- } else {
+ tapology, err := db.GetTapology(context.Background(), ff.Name)
+
+ if err == nil {
ff.Link = tapology.Url
+ continue
+ }
+
+ slog.Error("Failed getting tapology from database", "name", ff.Name, "error", err)
+ link, err := GetTapologyLink(client, ff.Name)
+ time.Sleep(5 * time.Second)
+
+ if err != nil {
+ slog.Error("Failed getting tapology from site", "name", ff.Name, "error", err)
+ continue
+ }
+
+ ff.Link = link
+ slog.Debug("Got new tapology link", "name", ff.Name, "link", link)
+ err = db.CreateTapology(context.Background(), event.CreateTapologyParams{Name: ff.Name, Url: link})
+
+ if err != nil {
+ slog.Error("Failed creating tapology in database", "name", ff.Name, "error", err)
}
}
}
+
e.MarshalFights(fights)
}
}
diff --git a/src/scrapers_test.go b/src/scrapers_test.go
index 5238b29..6897851 100644
--- a/src/scrapers_test.go
+++ b/src/scrapers_test.go
@@ -152,7 +152,9 @@ func TestScrapeEvents(t *testing.T) {
ScrapeEvents(q, client, false)
}
-func TestUFCEventIncorrectlyFormatted1(t *testing.T) {
+// unfixable problem
+// no relevant info can be scraped
+func DontTestUFCEventIncorrectlyFormatted1(t *testing.T) {
client := NewDummyClient()
event := event.Event{Url: "incorrectly-formatted-1"}
err := ScrapeUFCEvent(client, &event)
diff --git a/src/server.go b/src/server.go
index ae6b608..ad685f4 100644
--- a/src/server.go
+++ b/src/server.go
@@ -14,9 +14,9 @@ import (
//go:embed static/*
var staticfiles embed.FS
-func RunServer(addr string, queries *event.Queries) error {
+func RunServer(addr string, db *event.Queries) error {
mux := http.NewServeMux()
- state := ServerState{queries: queries}
+ state := ServerState{db}
static, err := StaticHandler("/static/")
if err != nil {
return err
@@ -36,8 +36,8 @@ func StaticHandler(prefix string) (http.Handler, error) {
return http.StripPrefix(prefix, http.FileServer(http.FS(static))), nil
}
-func RouteIndex(w http.ResponseWriter, r *http.Request, q *event.Queries) {
- slug, err := q.GetUpcomingEvent(r.Context(), EventTime())
+func RouteIndex(w http.ResponseWriter, r *http.Request, db *event.Queries) {
+ slug, err := db.GetUpcomingEvent(r.Context(), EventTime())
if err != nil {
http.NotFound(w, r)
} else {
@@ -45,7 +45,7 @@ func RouteIndex(w http.ResponseWriter, r *http.Request, q *event.Queries) {
}
}
-func RouteEvent(w http.ResponseWriter, r *http.Request, q *event.Queries) {
+func RouteEvent(w http.ResponseWriter, r *http.Request, db *event.Queries) {
slug := r.PathValue("slug")
if len(slug) == 0 {
@@ -53,13 +53,13 @@ func RouteEvent(w http.ResponseWriter, r *http.Request, q *event.Queries) {
return
}
- event, err := q.GetEvent(r.Context(), slug)
+ event, err := db.GetEvent(r.Context(), slug)
if err != nil {
http.Redirect(w, r, "/", http.StatusSeeOther)
return
}
- upcoming, err := q.ListUpcomingEvents(r.Context(), EventTime())
+ upcoming, err := db.ListUpcomingEvents(r.Context(), EventTime())
if err != nil {
http.NotFound(w, r)
return
@@ -89,11 +89,11 @@ func EnvTime() (int64, error) {
type StateHandler func(w http.ResponseWriter, r *http.Request, q *event.Queries)
type ServerState struct {
- queries *event.Queries
+ db *event.Queries
}
func (state *ServerState) HandleFunc(handler StateHandler) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
- handler(w, r, state.queries)
+ handler(w, r, state.db)
}
}
diff --git a/src/static/styles.css b/src/static/styles.css
deleted file mode 100644
index dbda71d..0000000
--- a/src/static/styles.css
+++ /dev/null
@@ -1 +0,0 @@
-*,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.17 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}[multiple],[type=date],[type=datetime-local],[type=email],[type=month],[type=number],[type=password],[type=search],[type=tel],[type=text],[type=time],[type=url],[type=week],input:where(:not([type])),select,textarea{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-width:1px;border-radius:0;padding:.5rem .75rem;font-size:1rem;line-height:1.5rem;--tw-shadow:0 0 #0000}[multiple]:focus,[type=date]:focus,[type=datetime-local]:focus,[type=email]:focus,[type=month]:focus,[type=number]:focus,[type=password]:focus,[type=search]:focus,[type=tel]:focus,[type=text]:focus,[type=time]:focus,[type=url]:focus,[type=week]:focus,input:where(:not([type])):focus,select:focus,textarea:focus{outline:2px solid #0000;outline-offset:2px;--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-color:#2563eb}input::-moz-placeholder,textarea::-moz-placeholder{color:#6b7280;opacity:1}input::placeholder,textarea::placeholder{color:#6b7280;opacity:1}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-date-and-time-value{min-height:1.5em;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-meridiem-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-year-field{padding-top:0;padding-bottom:0}select{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3E%3C/svg%3E");background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-right:2.5rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}[multiple],[size]:where(select:not([size="1"])){background-image:none;background-position:0 0;background-repeat:unset;background-size:initial;padding-right:.75rem;-webkit-print-color-adjust:unset;print-color-adjust:unset}[type=checkbox],[type=radio]{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;display:inline-block;vertical-align:middle;background-origin:border-box;-webkit-user-select:none;-moz-user-select:none;user-select:none;flex-shrink:0;height:1rem;width:1rem;color:#2563eb;background-color:#fff;border-color:#6b7280;border-width:1px;--tw-shadow:0 0 #0000}[type=checkbox]{border-radius:0}[type=radio]{border-radius:100%}[type=checkbox]:focus,[type=radio]:focus{outline:2px solid #0000;outline-offset:2px;--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:2px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}[type=checkbox]:checked,[type=radio]:checked{border-color:#0000;background-color:currentColor;background-size:100% 100%;background-position:50%;background-repeat:no-repeat}[type=checkbox]:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 16 16'%3E%3Cpath d='M12.207 4.793a1 1 0 0 1 0 1.414l-5 5a1 1 0 0 1-1.414 0l-2-2a1 1 0 0 1 1.414-1.414L6.5 9.086l4.293-4.293a1 1 0 0 1 1.414 0'/%3E%3C/svg%3E")}@media (forced-colors:active) {[type=checkbox]:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=radio]:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 16 16'%3E%3Ccircle cx='8' cy='8' r='3'/%3E%3C/svg%3E")}@media (forced-colors:active) {[type=radio]:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=checkbox]:checked:focus,[type=checkbox]:checked:hover,[type=checkbox]:indeterminate,[type=radio]:checked:focus,[type=radio]:checked:hover{border-color:#0000;background-color:currentColor}[type=checkbox]:indeterminate{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3E%3Cpath stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3E%3C/svg%3E");background-size:100% 100%;background-position:50%;background-repeat:no-repeat}@media (forced-colors:active) {[type=checkbox]:indeterminate{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=checkbox]:indeterminate:focus,[type=checkbox]:indeterminate:hover{border-color:#0000;background-color:currentColor}[type=file]{background:unset;border-color:inherit;border-width:0;border-radius:0;padding:0;font-size:unset;line-height:inherit}[type=file]:focus{outline:1px solid ButtonText;outline:1px auto -webkit-focus-ring-color}:root,[data-theme]{background-color:hsla(var(--b1)/var(--tw-bg-opacity,1));color:hsla(var(--bc)/var(--tw-text-opacity,1))}html{-webkit-tap-highlight-color:transparent}:root,[data-theme=light]{color-scheme:light;--pf:258.89 94.378% 40.941%;--sf:314 100% 37.647%;--af:174 60% 40.784%;--nf:219 14.085% 22.275%;--in:198 93% 60%;--su:158 64% 52%;--wa:43 96% 56%;--er:0 91% 71%;--inc:198 100% 12%;--suc:158 100% 10%;--wac:43 100% 11%;--erc:0 100% 14%;--rounded-box:1rem;--rounded-btn:0.5rem;--rounded-badge:1.9rem;--animation-btn:0.25s;--animation-input:.2s;--btn-text-case:uppercase;--btn-focus-scale:0.95;--border-btn:1px;--tab-border:1px;--tab-radius:0.5rem;--p:258.89 94.378% 51.176%;--pc:0 0% 100%;--s:314 100% 47.059%;--sc:0 0% 100%;--a:174 60% 50.98%;--ac:174.71 43.59% 15.294%;--n:219 14.085% 27.843%;--nc:0 0% 100%;--b1:0 0% 100%;--b2:0 0% 94.902%;--b3:180 1.9608% 90%;--bc:215 27.907% 16.863%}[data-theme=night]{color-scheme:dark;--pf:198.44 93.204% 47.686%;--sf:234.45 89.474% 59.137%;--af:328.85 85.621% 56%;--b2:222.22 47.368% 10.059%;--b3:222.22 47.368% 9.0529%;--bc:222.22 65.563% 82.235%;--pc:198.44 100% 11.922%;--sc:234.45 100% 14.784%;--ac:328.85 100% 14%;--nc:217.24 75.772% 83.49%;--inc:198.46 100% 9.6078%;--suc:172.46 100% 10.078%;--wac:40.61 100% 12.706%;--erc:350.94 100% 14.235%;--rounded-box:1rem;--rounded-btn:0.5rem;--rounded-badge:1.9rem;--animation-btn:0.25s;--animation-input:.2s;--btn-text-case:uppercase;--btn-focus-scale:0.95;--border-btn:1px;--tab-border:1px;--tab-radius:0.5rem;--p:198.44 93.204% 59.608%;--s:234.45 89.474% 73.922%;--a:328.85 85.621% 70%;--n:217.24 32.584% 17.451%;--nf:217.06 30.357% 21.961%;--b1:222.22 47.368% 11.176%;--in:198.46 90.204% 48.039%;--su:172.46 66.008% 50.392%;--wa:40.61 88.172% 63.529%;--er:350.94 94.558% 71.176%}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.btn{display:inline-flex;flex-shrink:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;flex-wrap:wrap;align-items:center;justify-content:center;border-color:#0000;border-color:hsl(var(--n)/var(--tw-border-opacity));text-align:center;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1);border-radius:var(--rounded-btn,.5rem);height:3rem;padding-left:1rem;padding-right:1rem;font-size:.875rem;line-height:1.25rem;line-height:1em;min-height:3rem;font-weight:600;text-transform:uppercase;text-transform:var(--btn-text-case,uppercase);text-decoration-line:none;border-width:var(--border-btn,1px);animation:button-pop var(--animation-btn,.25s) ease-out;--tw-border-opacity:1;--tw-bg-opacity:1;background-color:hsl(var(--n)/var(--tw-bg-opacity));--tw-text-opacity:1;color:hsl(var(--nc)/var(--tw-text-opacity))}.btn-disabled,.btn[disabled]{pointer-events:none}.btn-square{height:3rem;width:3rem;padding:0}.btn.loading,.btn.loading:hover{pointer-events:none}.btn.loading:before{margin-right:.5rem;height:1rem;width:1rem;border-radius:9999px;border-width:2px;animation:spin 2s linear infinite;content:"";border-top-color:#0000;border-left-color:#0000;border-bottom-color:initial;border-right-color:initial}@media (prefers-reduced-motion:reduce){.btn.loading:before{animation:spin 10s linear infinite}}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.btn-group>input[type=radio].btn{-webkit-appearance:none;-moz-appearance:none;appearance:none}.btn-group>input[type=radio].btn:before{content:attr(data-title)}.checkbox{flex-shrink:0;--chkbg:var(--bc);--chkfg:var(--b1);height:1.5rem;width:1.5rem;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-width:1px;border-color:hsl(var(--bc)/var(--tw-border-opacity));--tw-border-opacity:0.2;border-radius:var(--rounded-btn,.5rem)}.drawer{display:grid;width:100%;overflow:hidden;height:100vh;height:100dvh}.drawer.drawer-end{direction:rtl}.drawer.drawer-end>*{direction:ltr}.drawer.drawer-end>.drawer-toggle~.drawer-side>.drawer-overlay+*{--tw-translate-x:100%;justify-self:end}.drawer.drawer-end>.drawer-toggle:checked~.drawer-side>.drawer-overlay+*,.drawer.drawer-end>.drawer-toggle~.drawer-side>.drawer-overlay+*{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.drawer.drawer-end>.drawer-toggle:checked~.drawer-side>.drawer-overlay+*{--tw-translate-x:0px}:where(.drawer-toggle~.drawer-content){height:inherit}.drawer-toggle{position:absolute;height:0;width:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;opacity:0}.drawer-toggle~.drawer-content{z-index:0;grid-column-start:1;grid-row-start:1;overflow-y:auto;transition-property:all;transition-duration:.3s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.drawer-toggle~.drawer-side{grid-column-start:1;grid-row-start:1;display:grid;max-height:100vh;overflow-x:hidden}.drawer-toggle~.drawer-side>.drawer-overlay{visibility:hidden;opacity:0;cursor:pointer;--tw-bg-opacity:1;background-color:hsl(var(--nf,var(--n))/var(--tw-bg-opacity))}.drawer-toggle~.drawer-side>.drawer-overlay,.drawer-toggle~.drawer-side>.drawer-overlay+*{grid-column-start:1;grid-row-start:1;transition-property:all;transition-duration:.3s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.drawer-toggle~.drawer-side>.drawer-overlay+*{z-index:10;--tw-translate-x:-100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.drawer-toggle:checked~.drawer-side{isolation:isolate;overflow-y:auto;overflow-x:hidden}.drawer-toggle:checked~.drawer-side>.drawer-overlay{visibility:visible;opacity:.999999;--tw-bg-opacity:0.4}.drawer-toggle:checked~.drawer-side>.drawer-overlay+*{--tw-translate-x:0px}.drawer-toggle:checked~.drawer-side>.drawer-overlay+*,[dir=rtl] .drawer-toggle~.drawer-side>.drawer-overlay+*{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}[dir=rtl] .drawer-toggle~.drawer-side>.drawer-overlay+*{--tw-translate-x:100%}[dir=rtl] .drawer-toggle:checked~.drawer-side>.drawer-overlay+*{--tw-translate-x:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}[dir=rtl] .drawer.drawer-end>.drawer-toggle~.drawer-side>.drawer-overlay+*{--tw-translate-x:-100%}[dir=rtl] .drawer.drawer-end>.drawer-toggle:checked~.drawer-side>.drawer-overlay+*{--tw-translate-x:0px}[dir=rtl] .drawer.drawer-end>.drawer-toggle:checked~.drawer-content{--tw-translate-x:0.5rem}@media (min-width:1024px){.drawer-mobile{grid-auto-columns:max-content auto}.drawer-mobile>.drawer-toggle~.drawer-content{height:auto}@media (min-width:1024px){.drawer-mobile>.drawer-toggle~.drawer-content{grid-column-start:2}.drawer-mobile>.drawer-toggle~.drawer-side>.drawer-overlay{visibility:visible}.drawer-mobile>.drawer-toggle~.drawer-side>.drawer-overlay+*{--tw-translate-x:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.drawer-mobile.drawer-end>.drawer-toggle~.drawer-content{grid-column-start:1}.drawer-mobile.drawer-end>.drawer-toggle~.drawer-side{grid-column-start:2}.drawer-mobile.drawer-end>.drawer-toggle~.drawer-side>.drawer-overlay{visibility:visible}.drawer-mobile.drawer-end>.drawer-toggle~.drawer-side>.drawer-overlay+*{--tw-translate-x:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}}.drawer-mobile>.drawer-toggle~.drawer-side{overflow-y:auto}.drawer-mobile.drawer-end{grid-auto-columns:auto max-content;direction:ltr}.drawer-mobile.drawer-end>.drawer-toggle~.drawer-content{height:auto}.drawer-mobile.drawer-end>.drawer-toggle~.drawer-side{overflow-y:auto}.drawer-mobile>.drawer-toggle:checked~.drawer-content{--tw-translate-x:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}}.label{display:flex;-webkit-user-select:none;-moz-user-select:none;user-select:none;align-items:center;justify-content:space-between;padding:.5rem .25rem}.hero{display:grid;width:100%;place-items:center;background-size:cover;background-position:50%}.hero>*{grid-column-start:1;grid-row-start:1}.hero-content{z-index:0;display:flex;align-items:center;justify-content:center;max-width:80rem;gap:1rem;padding:1rem}.input{flex-shrink:1;height:3rem;padding-left:1rem;padding-right:1rem;font-size:1rem;line-height:2;line-height:1.5rem;border-width:1px;border-color:hsl(var(--bc)/var(--tw-border-opacity));--tw-border-opacity:0;--tw-bg-opacity:1;background-color:hsl(var(--b1)/var(--tw-bg-opacity));border-radius:var(--rounded-btn,.5rem)}.input-group>.input{isolation:isolate}.input-group>*,.input-group>.input,.input-group>.select,.input-group>.textarea{border-radius:0}.link{cursor:pointer;text-decoration-line:underline}.menu{display:flex;flex-direction:column;flex-wrap:wrap}.menu.horizontal{display:inline-flex;flex-direction:row}.menu.horizontal :where(li){flex-direction:row}:where(.menu li){position:relative;display:flex;flex-shrink:0;flex-direction:column;flex-wrap:wrap;align-items:stretch}.menu :where(li:not(.menu-title))>:where(:not(ul)){display:flex}.menu :where(li:not(.disabled):not(.menu-title))>:where(:not(ul)){cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;align-items:center;outline:2px solid #0000;outline-offset:2px}.menu>:where(li>:not(ul):focus){outline:2px solid #0000;outline-offset:2px}.menu>:where(li.disabled>:not(ul):focus){cursor:auto}.menu>:where(li) :where(ul){display:flex;flex-direction:column;align-items:stretch}.menu>:where(li)>:where(ul){position:absolute;display:none;top:auto;left:100%;border-top-left-radius:inherit;border-top-right-radius:inherit;border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.menu>:where(li:hover)>:where(ul){display:flex}.menu>:where(li:focus)>:where(ul){display:flex}.navbar{display:flex;align-items:center;padding:var(--navbar-padding,.5rem);min-height:4rem;width:100%}:where(.navbar>*){display:inline-flex;align-items:center}.range{height:1.5rem;width:100%;cursor:pointer;-moz-appearance:none;appearance:none;-webkit-appearance:none;--range-shdw:var(--bc);overflow:hidden;background-color:initial;border-radius:var(--rounded-box,1rem)}.range:focus{outline:none}.btm-nav>* .label{font-size:1rem;line-height:1.5rem}.btn:active:focus,.btn:active:hover{animation:none}.btn:not(.no-animation):active:focus,.btn:not(.no-animation):active:hover{transform:scale(var(--btn-focus-scale,.95))}.btn-active,.btn:hover{--tw-border-opacity:1;border-color:hsl(var(--nf,var(--n))/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--nf,var(--n))/var(--tw-bg-opacity))}.btn:focus-visible{outline:2px solid hsl(var(--nf));outline-offset:2px}.btn.glass.btn-active,.btn.glass:hover{--glass-opacity:25%;--glass-border-opacity:15%}.btn.glass:focus-visible{outline:2px solid currentColor}.btn-ghost{border-width:1px;border-color:#0000;background-color:initial;color:currentColor}.btn-ghost.btn-active,.btn-ghost:hover{--tw-border-opacity:0;background-color:hsl(var(--bc)/var(--tw-bg-opacity));--tw-bg-opacity:0.2}.btn-ghost:focus-visible{outline:2px solid currentColor}.btn-disabled,.btn-disabled:hover,.btn[disabled],.btn[disabled]:hover{--tw-border-opacity:0;background-color:hsl(var(--n)/var(--tw-bg-opacity));--tw-bg-opacity:0.2;color:hsl(var(--bc)/var(--tw-text-opacity));--tw-text-opacity:0.2}.btn.loading.btn-circle:before,.btn.loading.btn-square:before{margin-right:0}.btn.loading.btn-lg:before,.btn.loading.btn-xl:before{height:1.25rem;width:1.25rem}.btn.loading.btn-sm:before,.btn.loading.btn-xs:before{height:.75rem;width:.75rem}.btn-group>.btn-active,.btn-group>input[type=radio]:checked.btn{--tw-border-opacity:1;border-color:hsl(var(--p)/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--p)/var(--tw-bg-opacity));--tw-text-opacity:1;color:hsl(var(--pc)/var(--tw-text-opacity))}.btn-group>.btn-active:focus-visible,.btn-group>input[type=radio]:checked.btn:focus-visible{outline:2px solid hsl(var(--p))}@keyframes button-pop{0%{transform:scale(var(--btn-focus-scale,.95))}40%{transform:scale(1.02)}to{transform:scale(1)}}.checkbox:focus-visible{outline:2px solid hsl(var(--bc));outline-offset:2px}.checkbox:checked,.checkbox[aria-checked=true],.checkbox[checked=true]{background-image:linear-gradient(-45deg,#0000 65%,hsl(var(--chkbg)) 65.99%),linear-gradient(45deg,#0000 75%,hsl(var(--chkbg)) 75.99%),linear-gradient(-45deg,hsl(var(--chkbg)) 40%,#0000 40.99%),linear-gradient(45deg,hsl(var(--chkbg)) 30%,hsl(var(--chkfg)) 30.99%,hsl(var(--chkfg)) 40%,#0000 40.99%),linear-gradient(-45deg,hsl(var(--chkfg)) 50%,hsl(var(--chkbg)) 50.99%)}.checkbox:checked,.checkbox:indeterminate,.checkbox[aria-checked=true],.checkbox[checked=true]{--tw-bg-opacity:1;background-color:hsl(var(--bc)/var(--tw-bg-opacity));background-repeat:no-repeat;animation:checkmark var(--animation-input,.2s) ease-in-out}.checkbox:indeterminate{background-image:linear-gradient(90deg,#0000 80%,hsl(var(--chkbg)) 80%),linear-gradient(-90deg,#0000 80%,hsl(var(--chkbg)) 80%),linear-gradient(0deg,hsl(var(--chkbg)) 43%,hsl(var(--chkfg)) 43%,hsl(var(--chkfg)) 57%,hsl(var(--chkbg)) 57%)}.checkbox:disabled{cursor:not-allowed;border-color:#0000;--tw-bg-opacity:1;background-color:hsl(var(--bc)/var(--tw-bg-opacity));opacity:.2}@keyframes checkmark{0%{background-position-y:5px}50%{background-position-y:-2px}to{background-position-y:0}}[dir=rtl] .checkbox:checked,[dir=rtl] .checkbox[aria-checked=true],[dir=rtl] .checkbox[checked=true]{background-image:linear-gradient(45deg,#0000 65%,hsl(var(--chkbg)) 65.99%),linear-gradient(-45deg,#0000 75%,hsl(var(--chkbg)) 75.99%),linear-gradient(45deg,hsl(var(--chkbg)) 40%,#0000 40.99%),linear-gradient(-45deg,hsl(var(--chkbg)) 30%,hsl(var(--chkfg)) 30.99%,hsl(var(--chkfg)) 40%,#0000 40.99%),linear-gradient(45deg,hsl(var(--chkfg)) 50%,hsl(var(--chkbg)) 50.99%)}.drawer.drawer-end>.drawer-toggle:checked~.drawer-content{--tw-translate-x:-0.5rem}.drawer-toggle:checked~.drawer-content,.drawer.drawer-end>.drawer-toggle:checked~.drawer-content{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.drawer-toggle:checked~.drawer-content{--tw-translate-x:0.5rem}.drawer-toggle:focus-visible~.drawer-content .drawer-button{outline:2px solid hsl(var(--nf));outline-offset:2px}.drawer-toggle:focus-visible~.drawer-content .drawer-button.btn-primary{outline:2px solid hsl(var(--p))}.drawer-toggle:focus-visible~.drawer-content .drawer-button.btn-secondary{outline:2px solid hsl(var(--s))}.drawer-toggle:focus-visible~.drawer-content .drawer-button.btn-accent{outline:2px solid hsl(var(--a))}.drawer-toggle:focus-visible~.drawer-content .drawer-button.btn-info{outline:2px solid hsl(var(--in))}.drawer-toggle:focus-visible~.drawer-content .drawer-button.btn-success{outline:2px solid hsl(var(--su))}.drawer-toggle:focus-visible~.drawer-content .drawer-button.btn-warning{outline:2px solid hsl(var(--wa))}.drawer-toggle:focus-visible~.drawer-content .drawer-button.btn-error{outline:2px solid hsl(var(--er))}.drawer-toggle:focus-visible~.drawer-content .drawer-button.glass{outline:2px solid currentColor}.drawer-toggle:focus-visible~.drawer-content .drawer-button.btn-ghost{outline:2px solid currentColor}.drawer-toggle:focus-visible~.drawer-content .drawer-button.btn-link{outline:2px solid currentColor}.label a:hover{--tw-text-opacity:1;color:hsl(var(--bc)/var(--tw-text-opacity))}.input[list]::-webkit-calendar-picker-indicator{line-height:1em}.input:focus{outline:2px solid hsla(var(--bc)/.2);outline-offset:2px}.input-disabled,.input[disabled]{cursor:not-allowed;--tw-border-opacity:1;border-color:hsl(var(--b2,var(--b1))/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:hsl(var(--b2,var(--b1))/var(--tw-bg-opacity));--tw-text-opacity:0.2}.input-disabled::-moz-placeholder,.input[disabled]::-moz-placeholder{color:hsl(var(--bc)/var(--tw-placeholder-opacity));--tw-placeholder-opacity:0.2}.input-disabled::placeholder,.input[disabled]::placeholder{color:hsl(var(--bc)/var(--tw-placeholder-opacity));--tw-placeholder-opacity:0.2}.link:focus{outline:2px solid #0000;outline-offset:2px}.link:focus-visible{outline:2px solid currentColor;outline-offset:2px}.menu.horizontal>li.bordered>a,.menu.horizontal>li.bordered>button,.menu.horizontal>li.bordered>span{border-left-width:0;border-bottom-width:4px;--tw-border-opacity:1;border-color:hsl(var(--p)/var(--tw-border-opacity))}.menu[class*=" p-"]:not(.menu[class*=" p-0"]) li>*,.menu[class*=" px-"]:not(.menu[class*=" px-0"]) li>*,.menu[class^=p-]:not(.menu[class^=p-0]) li>*,.menu[class^=px-]:not(.menu[class^=px-0]) li>*{border-radius:var(--rounded-btn,.5rem)}.menu :where(li.bordered>*){border-left-width:4px;--tw-border-opacity:1;border-color:hsl(var(--p)/var(--tw-border-opacity))}.menu :where(li)>:where(:not(ul)){gap:.75rem;padding:.75rem 1rem;color:currentColor}.menu :where(li:not(.menu-title):not(:empty))>:where(:not(ul):focus),.menu :where(li:not(.menu-title):not(:empty))>:where(:not(ul):hover){background-color:hsl(var(--bc)/var(--tw-bg-opacity));--tw-bg-opacity:0.1}.menu :where(li:not(.menu-title):not(:empty))>:where(:not(ul).active),.menu :where(li:not(.menu-title):not(:empty))>:where(:not(ul):active){--tw-bg-opacity:1;background-color:hsl(var(--p)/var(--tw-bg-opacity));--tw-text-opacity:1;color:hsl(var(--pc)/var(--tw-text-opacity))}.menu :where(li:empty){margin:.5rem 1rem;height:1px;background-color:hsl(var(--bc)/var(--tw-bg-opacity));--tw-bg-opacity:0.1}.menu li.disabled>*{-webkit-user-select:none;-moz-user-select:none;user-select:none;color:hsl(var(--bc)/var(--tw-text-opacity));--tw-text-opacity:0.2}.menu li.disabled>:hover{background-color:initial}.menu li.hover-bordered a{border-left-width:4px;border-color:#0000}.menu li.hover-bordered a:hover{--tw-border-opacity:1;border-color:hsl(var(--p)/var(--tw-border-opacity))}.menu.compact li>a,.menu.compact li>span{padding-top:.5rem;padding-bottom:.5rem;font-size:.875rem;line-height:1.25rem}.menu .menu-title{font-size:.75rem;line-height:1rem;font-weight:700;opacity:.4}.menu .menu-title>*{padding-top:.25rem;padding-bottom:.25rem}.menu :where(li:not(.disabled))>:where(:not(ul)){outline:2px solid #0000;outline-offset:2px;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.menu>:where(li:first-child){border-top-left-radius:inherit;border-top-right-radius:inherit;border-bottom-right-radius:unset;border-bottom-left-radius:unset}.menu>:where(li:first-child)>:where(:not(ul)){border-top-left-radius:inherit;border-top-right-radius:inherit;border-bottom-right-radius:unset;border-bottom-left-radius:unset}.menu>:where(li:last-child){border-top-left-radius:unset;border-top-right-radius:unset;border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.menu>:where(li:last-child)>:where(:not(ul)){border-top-left-radius:unset;border-top-right-radius:unset;border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.menu>:where(li:first-child:last-child){border-top-left-radius:inherit;border-top-right-radius:inherit;border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.menu>:where(li:first-child:last-child)>:where(:not(ul)){border-top-left-radius:inherit;border-top-right-radius:inherit;border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.menu>:where(li)>:where(ul) :where(li){width:100%;white-space:nowrap}.menu>:where(li)>:where(ul) :where(li) :where(ul){padding-left:1rem}.menu>:where(li)>:where(ul) :where(li)>:where(:not(ul)){width:100%;white-space:nowrap}.menu>:where(li)>:where(ul)>:where(li:first-child){border-top-left-radius:inherit;border-top-right-radius:inherit;border-bottom-right-radius:unset;border-bottom-left-radius:unset}.menu>:where(li)>:where(ul)>:where(li:first-child)>:where(:not(ul)){border-top-left-radius:inherit;border-top-right-radius:inherit;border-bottom-right-radius:unset;border-bottom-left-radius:unset}.menu>:where(li)>:where(ul)>:where(li:last-child){border-top-left-radius:unset;border-top-right-radius:unset;border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.menu>:where(li)>:where(ul)>:where(li:last-child)>:where(:not(ul)){border-top-left-radius:unset;border-top-right-radius:unset;border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.menu>:where(li)>:where(ul)>:where(li:first-child:last-child){border-top-left-radius:inherit;border-top-right-radius:inherit;border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.menu>:where(li)>:where(ul)>:where(li:first-child:last-child)>:where(:not(ul)){border-top-left-radius:inherit;border-top-right-radius:inherit;border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}@keyframes progress-loading{50%{left:107%}}@keyframes radiomark{0%{box-shadow:0 0 0 12px hsl(var(--b1)) inset,0 0 0 12px hsl(var(--b1)) inset}50%{box-shadow:0 0 0 3px hsl(var(--b1)) inset,0 0 0 3px hsl(var(--b1)) inset}to{box-shadow:0 0 0 4px hsl(var(--b1)) inset,0 0 0 4px hsl(var(--b1)) inset}}.range:focus-visible::-webkit-slider-thumb{--focus-shadow:0 0 0 6px hsl(var(--b1)) inset,0 0 0 2rem hsl(var(--range-shdw)) inset}.range:focus-visible::-moz-range-thumb{--focus-shadow:0 0 0 6px hsl(var(--b1)) inset,0 0 0 2rem hsl(var(--range-shdw)) inset}.range::-webkit-slider-runnable-track{height:.5rem;width:100%;border-radius:var(--rounded-box,1rem);background-color:hsla(var(--bc)/.1)}.range::-moz-range-track{height:.5rem;width:100%;border-radius:var(--rounded-box,1rem);background-color:hsla(var(--bc)/.1)}.range::-webkit-slider-thumb{background-color:hsl(var(--b1));position:relative;height:1.5rem;width:1.5rem;border-style:none;border-radius:var(--rounded-box,1rem);appearance:none;-webkit-appearance:none;top:50%;color:hsl(var(--range-shdw));transform:translateY(-50%);--filler-size:100rem;--filler-offset:0.6rem;box-shadow:0 0 0 3px hsl(var(--range-shdw)) inset,var(--focus-shadow,0 0),calc(var(--filler-size)*-1 - var(--filler-offset)) 0 0 var(--filler-size)}.range::-moz-range-thumb{background-color:hsl(var(--b1));position:relative;height:1.5rem;width:1.5rem;border-style:none;border-radius:var(--rounded-box,1rem);top:50%;color:hsl(var(--range-shdw));--filler-size:100rem;--filler-offset:0.5rem;box-shadow:0 0 0 3px hsl(var(--range-shdw)) inset,var(--focus-shadow,0 0),calc(var(--filler-size)*-1 - var(--filler-offset)) 0 0 var(--filler-size)}@keyframes rating-pop{0%{transform:translateY(-.125em)}40%{transform:translateY(-.125em)}to{transform:translateY(0)}}@keyframes toast-pop{0%{transform:scale(.9);opacity:0}to{transform:scale(1);opacity:1}}.btn-square:where(.btn-xs){height:1.5rem;width:1.5rem;padding:0}.btn-square:where(.btn-sm){height:2rem;width:2rem;padding:0}.btn-square:where(.btn-md){height:3rem;width:3rem;padding:0}.btn-square:where(.btn-lg){height:4rem;width:4rem;padding:0}.btn-group .btn:not(:first-child):not(:last-child){border-start-start-radius:0;border-start-end-radius:0;border-end-start-radius:0;border-end-end-radius:0}.btn-group .btn:first-child:not(:last-child){margin-top:0;margin-left:-1px;border-start-start-radius:var(--rounded-btn,.5rem);border-start-end-radius:0;border-end-start-radius:var(--rounded-btn,.5rem);border-end-end-radius:0}.btn-group .btn:last-child:not(:first-child){border-start-start-radius:0;border-start-end-radius:var(--rounded-btn,.5rem);border-end-start-radius:0;border-end-end-radius:var(--rounded-btn,.5rem)}.btn-group-horizontal .btn:not(:first-child):not(:last-child){border-start-start-radius:0;border-start-end-radius:0;border-end-start-radius:0;border-end-end-radius:0}.btn-group-horizontal .btn:first-child:not(:last-child){margin-top:0;margin-left:-1px;border-start-start-radius:var(--rounded-btn,.5rem);border-start-end-radius:0;border-end-start-radius:var(--rounded-btn,.5rem);border-end-end-radius:0}.btn-group-horizontal .btn:last-child:not(:first-child){border-start-start-radius:0;border-start-end-radius:var(--rounded-btn,.5rem);border-end-start-radius:0;border-end-end-radius:var(--rounded-btn,.5rem)}.btn-group-vertical .btn:first-child:not(:last-child){margin-top:-1px;margin-left:0;border-start-start-radius:var(--rounded-btn,.5rem);border-start-end-radius:var(--rounded-btn,.5rem);border-end-start-radius:0;border-end-end-radius:0}.btn-group-vertical .btn:last-child:not(:first-child){border-start-start-radius:0;border-start-end-radius:0;border-end-start-radius:var(--rounded-btn,.5rem);border-end-end-radius:var(--rounded-btn,.5rem)}.sticky{position:sticky}.top-0{top:0}.z-50{z-index:50}.col-span-2{grid-column:span 2/span 2}.mx-auto{margin-left:auto;margin-right:auto}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mt-3{margin-top:.75rem}.inline{display:inline}.flex{display:flex}.grid{display:grid}.hidden{display:none}.aspect-\[16\/9\]{aspect-ratio:16/9}.h-32{height:8rem}.h-6{height:1.5rem}.h-\[450px\]{height:450px}.h-full{height:100%}.h-screen{height:100vh}.w-32{width:8rem}.w-6{width:1.5rem}.w-80{width:20rem}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.flex-1{flex:1 1 0%}.flex-none{flex:none}.grow{flex-grow:1}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.flex-col{flex-direction:column}.content-center{align-content:center}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-4{gap:1rem}.place-self-center{place-self:center}.self-center{align-self:center}.overflow-scroll{overflow:scroll}.rounded{border-radius:.25rem}.rounded-lg{border-radius:.5rem}.rounded-b-none{border-bottom-right-radius:0;border-bottom-left-radius:0}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-b-4{border-bottom-width:4px}.border-t-8{border-top-width:8px}.border-accent{--tw-border-opacity:1;border-color:hsl(var(--a)/var(--tw-border-opacity,1))}.border-blue-500{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity,1))}.border-neutral-content{--tw-border-opacity:1;border-color:hsl(var(--nc)/var(--tw-border-opacity,1))}.border-red-500{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity,1))}.bg-black\/50{background-color:#00000080}.bg-neutral{--tw-bg-opacity:1;background-color:hsl(var(--n)/var(--tw-bg-opacity,1))}.bg-neutral-focus{--tw-bg-opacity:1;background-color:hsl(var(--nf,var(--n))/var(--tw-bg-opacity,1))}.bg-cover{background-size:cover}.bg-\[center_top_-14rem\]{background-position:center top -14rem}.fill-neutral-content{fill:hsl(var(--nc))}.fill-white{fill:#fff}.object-cover{-o-object-fit:cover;object-fit:cover}.object-top{-o-object-position:top;object-position:top}.p-4{padding:1rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-32{padding-left:8rem;padding-right:8rem}.px-4{padding-left:1rem;padding-right:1rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-4{padding-top:1rem;padding-bottom:1rem}.pb-1{padding-bottom:.25rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pt-0{padding-top:0}.pt-1{padding-top:.25rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.text-center{text-align:center}.text-right{text-align:right}.align-top{vertical-align:top}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-6xl{font-size:3.75rem;line-height:1}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-light{font-weight:300}.font-semibold{font-weight:600}.normal-case{text-transform:none}.tracking-tighter{letter-spacing:-.05em}.text-neutral-content{--tw-text-opacity:1;color:hsl(var(--nc)/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.no-underline{text-decoration-line:none}.shadow-2xl{--tw-shadow:0 25px 50px -12px #00000040;--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.hover\:underline:hover{text-decoration-line:underline}@media (min-width:1024px){.lg\:order-1{order:1}.lg\:order-2{order:2}.lg\:mx-5{margin-left:1.25rem;margin-right:1.25rem}.lg\:mb-4{margin-bottom:1rem}.lg\:mt-0{margin-top:0}.lg\:block{display:block}.lg\:hidden{display:none}.lg\:flex-row{flex-direction:row}.lg\:justify-end{justify-content:flex-end}.lg\:border-l-8{border-left-width:8px}.lg\:border-r-8{border-right-width:8px}.lg\:border-t-0{border-top-width:0}.lg\:pl-5{padding-left:1.25rem}.lg\:pr-5{padding-right:1.25rem}.lg\:pt-0{padding-top:0}.lg\:text-base{font-size:1rem;line-height:1.5rem}}@media (min-width:1536px){.\32xl\:h-\[550px\]{height:550px}}
\ No newline at end of file
diff --git a/src/testdata/one-171.html b/src/testdata/one-171.html
deleted file mode 100644
index 4038081..0000000
--- a/src/testdata/one-171.html
+++ /dev/null
@@ -1,2427 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
- ONE 171: Qatar - ONE Championship – The Home Of Martial Arts
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Next Event
-
-
-
-
-
-
-
-
-
-
Lusail Sports Arena, Lusail
-
- ONE 171: Qatar
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Nearly a year after its captivating maiden voyage to Qatar, ONE Championship will make its highly anticipated return to the Middle Eastern country for ONE 171: Qatar, which will be broadcast live from the state-of-the-art Lusail Sports Arena on Thursday, February 20, 2025.
-
This blockbuster spectacle will feature ONE Bantamweight Kickboxing World Champion Jonathan “The General” Haggerty, who will defend his coveted gold for the first time. Standing across from him will be the #1-ranked contender, Wei Rui, a Chinese kickboxing megastar who is riding an astonishing 21-fight winning streak.
-
Also, reigning divisional king Joshua “The Passion” Pacio and interim titleholder Jarred “The Monkey God” Brooks will meet in a trilogy bout to unify the ONE Strawweight MMA World Championship.
-
Plus, several more global martial arts superstars and regional sensations will be added to the lineup in the weeks to come.
-
So, mark your calendar, put a reminder in your phone, grab your tickets, and make sure you don’t miss ONE 171: Qatar live on February 20, 2025!
-
-
-
-
- Show More
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Show More
-
-
-
-
-
- View All Related Content
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/testdata/one-172.html b/src/testdata/one-172.html
deleted file mode 100644
index 9678009..0000000
--- a/src/testdata/one-172.html
+++ /dev/null
@@ -1,2186 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
- ONE 172: Takeru vs. Rodtang - ONE Championship – The Home Of Martial Arts
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Next Event
-
-
-
-
-
-
-
-
-
-
Saitama Super Arena, Saitama
-
- ONE 172: Takeru vs. Rodtang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
The greatest collection of martial arts superstars on planet Earth will descend upon Saitama Super Arena when ONE Championship returns to Japan with ONE 172 on Sunday, March 23, 2025.
-
One of the featured bouts of the evening is a flyweight kickboxing super-fight between generational talents.
-
Former longtime ONE Flyweight Muay Thai World Champion Rodtang Jitmuangnon and three-division K-1 Champion Takeru Segawa have been calling each other out for years, and the matchup was scheduled in early 2024 until an injury threw a wrench into the plan. But with both combat sports icons now healthy, they will finally meet in the ring for a dream fight that promises to deliver fireworks.
-
Plus, in a rematch for the vacant ONE Flyweight MMA World Title, former longtime divisional king and #1-ranked contender Adriano Moraes goes head-to-head with the #2-ranked contender, Japan’s own Yuya Wakamatsu.
-
With more global superstars, Japanese phenoms, and World Title bouts scheduled for the card, ONE 172 promises to be an event for the ages.
-
Mark your calendar, put a reminder in your phone, grab your tickets , and make sure you don’t miss ONE 172 live on March 23, 2025!
-
-
-
-
- Show More
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- View All Related Content
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/testdata/one-event-list.html b/src/testdata/one-event-list.html
deleted file mode 100644
index 63e9676..0000000
--- a/src/testdata/one-event-list.html
+++ /dev/null
@@ -1,1852 +0,0 @@
-
-
-
-
-
- Events - ONE Championship – The Home Of Martial Arts
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-ONE Championship Schedule
-
-
-
Next Event
-
-
-
-
-
-
-
-
-
-
Lumpinee Stadium, Bangkok
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Lumpinee Stadium, Bangkok
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Lusail Sports Arena, Lusail
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Lumpinee Stadium, Bangkok
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Saitama Super Arena, Saitama
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Lumpinee Stadium, Bangkok
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Lumpinee Stadium, Bangkok
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Lumpinee Stadium, Bangkok
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Lumpinee Stadium, Bangkok
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Lumpinee Stadium, Bangkok
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Lumpinee Stadium, Bangkok
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Show More
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/testdata/one-fn-29.html b/src/testdata/one-fn-29.html
deleted file mode 100644
index 5f5d4e1..0000000
--- a/src/testdata/one-fn-29.html
+++ /dev/null
@@ -1,1114 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
- ONE Fight Night 29: Rodrigues vs. Cohen on Prime Video - ONE Championship – The Home Of Martial Arts
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Next Event
-
-
-
-
-
-
-
-
-
-
Lumpinee Stadium, Bangkok
-
- ONE Fight Night 29: Rodrigues vs. Cohen on Prime Video
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/testdata/one-friday-fights-97.html b/src/testdata/one-friday-fights-97.html
deleted file mode 100644
index eaede94..0000000
--- a/src/testdata/one-friday-fights-97.html
+++ /dev/null
@@ -1,1798 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
- ONE Friday Fights 97 - ONE Championship – The Home Of Martial Arts
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Next Event
-
-
-
-
-
-
-
-
-
-
Lumpinee Stadium, Bangkok
-
- ONE Friday Fights 97
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
After a double-header weekend at Lumpinee Stadium, the world’s largest martial arts organization returns to the iconic arena in Bangkok, Thailand, this February 14 with a dozen more Muay Thai and MMA bouts.
-
ONE Friday Fights 97 goes down live in Asia primetime where a cast of international rising stars will shoot their shot at a US$100,000 contract with ONE Championship.
-
In a 138-pound Muay Thai headliner, two-time Lumpinee Stadium Muay Thai World Champion Kongsuk Fairtex welcomes WMC World Champion Lamnamoonlek Tded99 to the weekly series.
-
Kongsuk has been a mainstay in ONE Friday Fights, beating some of the series’ top stars. But Lamnamoonlek will be his toughest test yet. The multiple-time fighter of the year award winner has a 103-29 record and a slew of accolades to match.
-
Elsewhere on the card, contracted Myanmar star Vero makes her ONE debut against Chile’s Francisca Vera in atomweight Muay Thai action. Before that, Jayson Miralpez of the Philippines and Ryuya Hatakeyama of Japan open the show in an intriguing strawweight MMA battle.
-
So, mark your calendar, put a reminder in your phone, and find out how you can watch ONE Friday Fights 97 live on February 14 in more than 190 countries around the globe!
-
-
-
-
- Show More
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/testdata/tapology-index.html b/src/testdata/tapology-index.html
deleted file mode 100644
index fd6586c..0000000
--- a/src/testdata/tapology-index.html
+++ /dev/null
@@ -1,2289 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-Tapology | MMA & Combat Sports
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
You are in desktop mode instead of your device's default layout.
-
-
-
-
-
-
-
-
-
-
-
-
-Saturday 02.22.2025 at 6:00 PM ET
-
-
-
-
- |
-
-ESPN+
-
- |
-Picks lock
-
-02.22.2025, 6:00 PM ET
-
-
-
-
Main Event
-
- |
-Henry Cejudo vs. Yadong Song
-
-
-
-
-
-
-
-
-
Previous
-
-
Next
-
-
-
-
-
-
-
Tapology MMA Feed
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-MMA Junkie :
-Mick Maynard's Shoes: What's next for Gregory Rodrigues after UFC Fight Night 251 loss?
-
-
-
-
-
-MMA Junkie :
-Fifth time's the charm: Angela Hill 'just getting started' in UFC after winning first split decision
-
-
-
-
-
-MMA Mania :
-‘Lionheart’ Books Retirement Fight Against Unranked KO Artist
-
-
-
-
-
-MMA Junkie :
-Mick Maynard's Shoes: What's next for Jared Cannonier after UFC Fight Night 251 win?
-
-
-
-
-
-MMAFighting.com :
-Jared Cannonier refuses to accept gatekeeper label, still eyeing ranked opponents and championships
-
-
-
-
-
-MMA Junkie :
-Video: Former UFC champs Alexander Volkanovski, Aljamain Sterling train together in Thailand
-
-
-
-
-
-MMAFighting.com :
-Andre Petroski calls out Bo Nickal after UFC Vegas 102 win, Nickal issues ruthless response
-
-
-
-
-
-MMA Mania :
-Merab Willing To Drop Belt For Topuria
-
-
-
-
-
-MMA Junkie :
-UFC Fight Night 251 post-event facts: The 40-year-old's thrive in victory
-
-
-
-
-
-MMAFighting.com :
-Ismael Bonfim avoids fractures in UFC Vegas 102 doctor stoppage loss
-
-
-
-
-
-MMA Mania :
-DC Expects Xtreme Changes After Strickland Coach Clash
-
-
-
-
-
-MMA Junkie :
-UFC 315 targets Hailey Cowan vs. Nora Cornolle addition to Montreal lineup
-
-
-
-
-
-MMAFighting.com :
-Conor McGregor teases Fedor Emelianenko signing with BKFC
-
-
-
-
-
-Middle Easy :
-Conor McGregor Hints at Major Announcement Involving Fedor Emelianenko Joining Bare Knuckle Fighting Championship
-
-
-
-
-
-MMA Junkie :
-Fedor Emelianenko to BKFC? Conor McGregor says 'Stay tuned, we might have an announcement'
-
-
-
-
-
-MMA Junkie :
-Video: Drake greets Alex Pereira during concert in Sydney
-
-
-
-
-
-Middle Easy :
-Eddie Hearn Predicts Possible Early Stoppage Win For Canelo Alvarez Against Terence Crawford
-
-
-
-
-
-MMAFighting.com :
-MMA News Wrap-Up: Sean Strickland vs. the world, Israel Adesanya and Alex Pereira friendship, more
-
-
-
-
-
-MMA Mania :
-Mac Vows He’ll Fight Bare Knuckle: ‘Mark My Words!’
-
-
-
-
-
-MMA Junkie :
-Video: Conor McGregor promises BKFC fight will come, names potential opponents
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/testdata/ufc-312.html b/src/testdata/ufc-312.html
deleted file mode 100644
index 5ce87de..0000000
--- a/src/testdata/ufc-312.html
+++ /dev/null
@@ -1,5600 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- UFC 312: Du Plessis vs Strickland 2 | UFC
-
-
-
-
-
-
-
-
-
-
-
-
-
- Skip to main content
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Sat, Feb 8 / 10:00 PM EST
-
-
-
Qudos Bank Arena,
- Sydney Olympic Park Australia
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- UFC 312
-
-
-
-
- Sat, Feb 8 / 10:00 PM EST
-
-
-
-
-
- Sat, Feb 8 / 10:00 PM EST
- .
- Qudos Bank Arena,
- Sydney Olympic Park Australia
-
-
-
-
-
-
-
-
-
-
-
-
-
- How to watch
-
-
-
-
-
-
-
-
-
-
-
-
-
- Sponsored By
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Main Card
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Main Card
-
-
-
- Sat, Feb 8 / 10:00 PM EST
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- C
-
-
Middleweight Title Bout
-
- #1
-
-
-
-
-
-
-
-
-
-
-
- C
-
-
Middleweight Title Bout
-
- #1
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
South Africa
-
-
-
- -218
-
- odds
-
- +180
-
-
-
-
-
United States
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- C
-
-
Women's Strawweight Title Bout
-
- #1
-
-
-
-
-
-
-
-
-
-
-
- C
-
-
Women's Strawweight Title Bout
-
- #1
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
China
-
-
-
- +114
-
- odds
-
- -135
-
-
-
-
-
United States
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Heavyweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Heavyweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
New Zealand
-
-
-
- +136
-
- odds
-
- -162
-
-
-
-
-
Brazil
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Light Heavyweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Light Heavyweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Australia
-
-
-
- +124
-
- odds
-
- -148
-
-
-
-
-
Brazil
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Welterweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Welterweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Australia
-
-
-
- -245
-
- odds
-
- +200
-
-
-
-
-
Argentina
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Prelims
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Prelims
-
-
-
- Sat, Feb 8 / 8:00 PM EST
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Featherweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Featherweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Australia
-
-
-
- +190
-
- odds
-
- -230
-
-
-
-
-
Brazil
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Lightweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Lightweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Australia
-
-
-
- -102
-
- odds
-
- -118
-
-
-
-
-
Russia
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Women's Flyweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Women's Flyweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
China
-
-
-
- -355
-
- odds
-
- +280
-
-
-
-
-
Brazil
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Bantamweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Bantamweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Australia
-
-
-
- +270
-
- odds
-
- -340
-
-
-
-
-
Georgia
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Early Prelims
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Early Prelims
-
-
-
- Sat, Feb 8 / 6:30 PM EST
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Lightweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Lightweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
China
-
-
-
- +240
-
- odds
-
- -298
-
-
-
-
-
United States
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Welterweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Welterweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Australia
-
-
-
- +195
-
- odds
-
- -238
-
-
-
-
-
France
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Lightweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Lightweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Australia
-
-
-
- -650
-
- odds
-
- +470
-
-
-
-
-
India
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Get the advance word
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Main Card
-
-
-
-
-
-
-
- Early Prelims
-
-
- 6:30 PM EST
-
-
-
-
-
-
-
-
-
-
-
- Prelims
-
-
- 8:00 PM EST
-
-
-
-
-
-
-
-
-
-
-
- Main Card
-
-
- 10:00 PM EST
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Tickets
-
-
-
-
-
-
-
-
-
- Presale
- -
- UFC Fight Club
-
-
-
-
-
-
-
-
-
-
- Presale
- -
- UFC Newsletter
-
-
-
-
-
-
-
-
-
-
- On Sale
- -
- Public
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Watch Live in Bar
-
-
-
Showing this event live on pay-per-view
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Main Card
-
-
-
-
-
-
-
- Early Prelims
-
-
- 6:30 PM EST
-
-
-
-
-
-
-
-
-
-
-
- Prelims
-
-
- 8:00 PM EST
-
-
-
-
-
-
-
-
-
-
-
- Main Card
-
-
- 10:00 PM EST
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Tickets
-
-
-
-
-
-
-
-
-
- Presale
- -
- UFC Fight Club
-
-
-
-
-
-
-
-
-
-
- Presale
- -
- UFC Newsletter
-
-
-
-
-
-
-
-
-
-
- On Sale
- -
- Public
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Watch Live in Bar
-
-
-
Showing this event live on pay-per-view
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Fans voices come first
-
-
Favorite athlete? Fantasy match-ups? Comments? Leave 'em here!
-
-
-
-
-
-
-
-
-
- Share
-
-
-
-
-
-
-
-
-
-
- Comments
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/testdata/ufc-313.html b/src/testdata/ufc-313.html
deleted file mode 100644
index 9f95ede..0000000
--- a/src/testdata/ufc-313.html
+++ /dev/null
@@ -1,4123 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- UFC 313: Pereira vs Ankalaev | UFC
-
-
-
-
-
-
-
-
-
-
-
-
-
- Skip to main content
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Sat, Mar 8 / 10:00 PM EST
-
-
-
T-Mobile Arena,
- Las Vegas United States
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- UFC 313
-
-
-
-
- Sat, Mar 8 / 10:00 PM EST
-
-
-
-
-
- Sat, Mar 8 / 10:00 PM EST
- .
- T-Mobile Arena,
- Las Vegas United States
-
-
-
-
-
-
-
-
-
-
-
-
-
- How to watch
-
-
-
-
-
-
-
-
-
-
-
-
-
- Sponsored By
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Fight Card
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- C
-
-
Light Heavyweight Title Bout
-
- #1
-
-
-
-
-
-
-
-
-
-
-
- C
-
-
Light Heavyweight Title Bout
-
- #1
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Brazil
-
-
-
- -110
-
- odds
-
- -110
-
-
-
-
-
Russia
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #3
-
-
Lightweight Bout
-
- #6
-
-
-
-
-
-
-
-
-
-
-
- #3
-
-
Lightweight Bout
-
- #6
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
United States
-
-
-
- -
-
- odds
-
- -
-
-
-
-
-
New Zealand
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Lightweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Lightweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
United States
-
-
-
- -
-
- odds
-
- -
-
-
-
-
-
Brazil
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #13
-
-
Flyweight Bout
-
- #15
-
-
-
-
-
-
-
-
-
-
-
- #13
-
-
Flyweight Bout
-
- #15
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Brazil
-
-
-
- -
-
- odds
-
- -
-
-
-
-
-
United States
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #5
-
-
Women's Strawweight Bout
-
- #7
-
-
-
-
-
-
-
-
-
-
-
- #5
-
-
Women's Strawweight Bout
-
- #7
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Brazil
-
-
-
- -
-
- odds
-
- -
-
-
-
-
-
Brazil
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Featherweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Featherweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Brazil
-
-
-
- -
-
- odds
-
- -
-
-
-
-
-
United States
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Welterweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Welterweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
United States
-
-
-
- -
-
- odds
-
- -
-
-
-
-
-
Brazil
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Middleweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Middleweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Brazil
-
-
-
- -
-
- odds
-
- -
-
-
-
-
-
Armenia
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Bantamweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Bantamweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
United States
-
-
-
- -
-
- odds
-
- -
-
-
-
-
-
Brazil
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Middleweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Middleweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Brazil
-
-
-
- -
-
- odds
-
- -
-
-
-
-
-
United States
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Get the advance word
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Main Card
-
-
-
-
-
-
-
- Early Prelims
-
-
- 6:00 PM EST
-
-
-
-
-
-
-
-
-
-
-
- Prelims
-
-
- 8:00 PM EST
-
-
-
-
-
-
-
-
-
-
-
- Main Card
-
-
- 10:00 PM EST
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Tickets
-
-
-
-
-
-
-
-
-
- Presale
- -
- UFC Fight Club
-
-
-
-
-
-
-
-
-
-
- Presale
- -
- UFC Newsletter
-
-
-
-
-
-
-
-
-
-
- On Sale
- -
- Public
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Watch Live in Bar
-
-
-
Showing this event live on pay-per-view
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Main Card
-
-
-
-
-
-
-
- Early Prelims
-
-
- 6:00 PM EST
-
-
-
-
-
-
-
-
-
-
-
- Prelims
-
-
- 8:00 PM EST
-
-
-
-
-
-
-
-
-
-
-
- Main Card
-
-
- 10:00 PM EST
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Tickets
-
-
-
-
-
-
-
-
-
- Presale
- -
- UFC Fight Club
-
-
-
-
-
-
-
-
-
-
- Presale
- -
- UFC Newsletter
-
-
-
-
-
-
-
-
-
-
- On Sale
- -
- Public
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Watch Live in Bar
-
-
-
Showing this event live on pay-per-view
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Fans voices come first
-
-
Favorite athlete? Fantasy match-ups? Comments? Leave 'em here!
-
-
-
-
-
-
-
-
-
- Share
-
-
-
-
-
-
-
-
-
-
- Comments
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/testdata/ufc-event-list.html b/src/testdata/ufc-event-list.html
deleted file mode 100644
index a9403c7..0000000
--- a/src/testdata/ufc-event-list.html
+++ /dev/null
@@ -1,6577 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- UFC Fight Cards, Watch Times, Live Stats | UFC.com
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Skip to main content
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Events
-
-
-
-
-
-
-
-
-
-
- What's Trending Now
-
-
-
- Sponsored By
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Upcoming
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
How to Watch
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Main Card
-
-
-
-
-
-
-
- Early Prelims
-
-
- 6:30 PM EST
-
-
-
-
-
-
-
-
-
-
-
- Prelims
-
-
- 8:00 PM EST
-
-
-
-
-
-
-
-
-
-
-
- Main Card
-
-
- 10:00 PM EST
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Tickets
-
-
-
-
-
-
-
-
-
- Presale
- -
- UFC Fight Club
-
-
-
-
-
-
-
-
-
-
- Presale
- -
- UFC Newsletter
-
-
-
-
-
-
-
-
-
-
- On Sale
- -
- Public
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Watch Live in Bar
-
-
-
Showing this event live on pay-per-view
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Qudos Bank Arena
-
-
-
-
Sydney Olympic Park NSW
-Australia
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
How to Watch
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Main Card
-
-
-
-
-
-
-
- Prelims
-
-
- 4:00 PM EST
-
-
-
-
-
-
-
-
-
-
-
- Main Card
-
-
- 7:00 PM EST
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Watch On-the-Go
-
-
-
-
-
-
-
- Download the UFC Mobile App for past & live fights and more!
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- UFC APEX
-
-
-
-
Las Vegas , NV
-United States
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
How to Watch
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Main Card
-
-
-
-
-
-
-
- Prelims
-
-
- 6:00 PM EST
-
-
-
-
-
-
-
-
-
-
-
- Main Card
-
-
- 9:00 PM EST
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Tickets
-
-
-
-
-
-
-
-
-
- Presale
- -
- UFC Fight Club
-
-
-
-
-
-
-
-
-
-
- Presale
- -
- UFC Newsletter
-
-
-
-
-
-
-
-
-
-
- On Sale
- -
- Public
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Watch On-the-Go
-
-
-
-
-
-
-
- Download the UFC Mobile App for past & live fights and more!
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Climate Pledge Arena
-
-
-
-
Seattle , WA
-United States
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
How to Watch
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Main Card
-
-
-
-
-
-
-
- Prelims
-
-
- 4:00 PM EST
-
-
-
-
-
-
-
-
-
-
-
- Main Card
-
-
- 7:00 PM EST
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Watch On-the-Go
-
-
-
-
-
-
-
- Download the UFC Mobile App for past & live fights and more!
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- UFC APEX
-
-
-
-
Las Vegas , NV
-United States
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
How to Watch
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Main Card
-
-
-
-
-
-
-
- Early Prelims
-
-
- 6:00 PM EST
-
-
-
-
-
-
-
-
-
-
-
- Prelims
-
-
- 8:00 PM EST
-
-
-
-
-
-
-
-
-
-
-
- Main Card
-
-
- 10:00 PM EST
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Tickets
-
-
-
-
-
-
-
-
-
- Presale
- -
- UFC Fight Club
-
-
-
-
-
-
-
-
-
-
- Presale
- -
- UFC Newsletter
-
-
-
-
-
-
-
-
-
-
- On Sale
- -
- Public
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Watch Live in Bar
-
-
-
Showing this event live on pay-per-view
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- T-Mobile Arena
-
-
-
-
Las Vegas , NV
-United States
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
How to Watch
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Main Card
-
-
-
-
-
-
-
- Prelims
-
-
- 4:00 PM EDT
-
-
-
-
-
-
-
-
-
-
-
- Main Card
-
-
- 7:00 PM EDT
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Watch On-the-Go
-
-
-
-
-
-
-
- Download the UFC Mobile App for past & live fights and more!
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- UFC APEX
-
-
-
-
Las Vegas , NV
-United States
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
How to Watch
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Main Card
-
-
-
-
-
-
-
- Prelims
-
-
- 12:00 PM EDT
-
-
-
-
-
-
-
-
-
-
-
- Main Card
-
-
- 3:00 PM EDT
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Tickets
-
-
-
-
-
-
-
-
-
- Presale
- -
- UFC Fight Club
-
-
-
-
-
-
-
-
-
-
- Presale
- -
- UFC Newsletter
-
-
-
-
-
-
-
-
-
-
- On Sale
- -
- Public
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Watch On-the-Go
-
-
-
-
-
-
-
- Download the UFC Mobile App for past & live fights and more!
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- O2 Arena
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
How to Watch
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Main Card
-
-
-
-
-
-
-
- Prelims
-
-
- 4:00 PM EDT
-
-
-
-
-
-
-
-
-
-
-
- Main Card
-
-
- 7:00 PM EDT
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Watch On-the-Go
-
-
-
-
-
-
-
- Download the UFC Mobile App for past & live fights and more!
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Past
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- anb Arena
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Intuit Dome
-
-
-
-
Inglewood , CA
-United States
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- UFC APEX
-
-
-
-
Las Vegas , NV
-United States
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Amalie Arena
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- T-Mobile Arena
-
-
-
-
Las Vegas , NV
-United States
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Galaxy Arena
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Madison Square Garden
-
-
-
-
New York , NY
-United States
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- UFC APEX
-
-
-
-
Las Vegas , NV
-United States
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- What's Trending Now
-
-
-
- Sponsored By
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Filter 524 Athletes
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/testdata/ufc-fn-feb-15.html b/src/testdata/ufc-fn-feb-15.html
deleted file mode 100644
index 20d5f2e..0000000
--- a/src/testdata/ufc-fn-feb-15.html
+++ /dev/null
@@ -1,5154 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- UFC Fight Night: Cannonier vs Rodrigues | UFC
-
-
-
-
-
-
-
-
-
-
-
-
-
- Skip to main content
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Sat, Feb 15 / 7:00 PM EST
-
-
-
UFC APEX,
- Las Vegas United States
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- UFC Fight Night
-
-
-
-
- Sat, Feb 15 / 7:00 PM EST
-
-
-
-
-
- Sat, Feb 15 / 7:00 PM EST
- .
- UFC APEX,
- Las Vegas United States
-
-
-
-
-
-
-
-
-
-
-
-
-
- How to watch
-
-
-
-
-
-
-
-
-
-
-
-
-
- Sponsored By
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Main Card
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Main Card
-
-
-
- Sat, Feb 15 / 7:00 PM EST
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #7
-
-
Middleweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
- #7
-
-
Middleweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
United States
-
-
-
- +170
-
- odds
-
- -205
-
-
-
-
-
Brazil
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #10
-
-
Featherweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
- #10
-
-
Featherweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
United States
-
-
-
- +310
-
- odds
-
- -395
-
-
-
-
-
Morocco
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Middleweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Middleweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
United States
-
-
-
- -278
-
- odds
-
- +225
-
-
-
-
-
United States
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Lightweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Lightweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Brazil
-
-
-
- -135
-
- odds
-
- +114
-
-
-
-
-
Azerbaijan
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Middleweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Middleweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Brazil
-
-
-
- -205
-
- odds
-
- +170
-
-
-
-
-
United States
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Featherweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Featherweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
United States
-
-
-
- -
-
- odds
-
- -
-
-
-
-
-
United States
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Prelims
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Prelims
-
-
-
- Sat, Feb 15 / 4:00 PM EST
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #13
-
-
Women's Strawweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
- #13
-
-
Women's Strawweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
United States
-
-
-
- -110
-
- odds
-
- -110
-
-
-
-
-
Brazil
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Lightweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Lightweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
United States
-
-
-
- -175
-
- odds
-
- +145
-
-
-
-
-
Brazil
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Flyweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Flyweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Brazil
-
-
-
- -310
-
- odds
-
- +250
-
-
-
-
-
Mexico
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Welterweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Welterweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Brazil
-
-
-
- -
-
- odds
-
- -
-
-
-
-
-
United States
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Bantamweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Bantamweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
United States
-
-
-
- -
-
- odds
-
- -
-
-
-
-
-
United States
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #14
-
-
Heavyweight Bout
-
- #14
-
-
-
-
-
-
-
-
-
-
-
- #14
-
-
Heavyweight Bout
-
- #14
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
United States
-
-
-
- -180
-
- odds
-
- +150
-
-
-
-
-
Brazil
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #12
-
-
Women's Bantamweight Bout
-
- #13
-
-
-
-
-
-
-
-
-
-
-
- #12
-
-
Women's Bantamweight Bout
-
- #13
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
United States
-
-
-
- +310
-
- odds
-
- -395
-
-
-
-
-
Portugal
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Early Prelims
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Get the advance word
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Main Card
-
-
-
-
-
-
-
- Prelims
-
-
- 4:00 PM EST
-
-
-
-
-
-
-
-
-
-
-
- Main Card
-
-
- 7:00 PM EST
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Watch On-the-Go
-
-
-
-
-
-
-
- Download the UFC Mobile App for past & live fights and more!
-
-
-
-
-
-
-
-
-
-
-
-
Main Card
-
-
-
-
-
-
-
- Prelims
-
-
- 4:00 PM EST
-
-
-
-
-
-
-
-
-
-
-
- Main Card
-
-
- 7:00 PM EST
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Watch On-the-Go
-
-
-
-
-
-
-
- Download the UFC Mobile App for past & live fights and more!
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Fans voices come first
-
-
Favorite athlete? Fantasy match-ups? Comments? Leave 'em here!
-
-
-
-
-
-
-
-
-
- Share
-
-
-
-
-
-
-
-
-
-
- Comments
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/testdata/ufc-fn-feb-22.html b/src/testdata/ufc-fn-feb-22.html
deleted file mode 100644
index 8a89745..0000000
--- a/src/testdata/ufc-fn-feb-22.html
+++ /dev/null
@@ -1,5065 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- UFC Seattle: Cejudo vs Song | UFC
-
-
-
-
-
-
-
-
-
-
-
-
-
- Skip to main content
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Sat, Feb 22 / 9:00 PM EST
-
-
-
Climate Pledge Arena,
- Seattle United States
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- UFC Fight Night
-
-
-
-
- Sat, Feb 22 / 9:00 PM EST
-
-
-
-
-
- Sat, Feb 22 / 9:00 PM EST
- .
- Climate Pledge Arena,
- Seattle United States
-
-
-
-
-
-
-
-
-
-
-
-
-
- How to watch
-
-
-
-
-
-
-
-
-
-
-
-
-
- Sponsored By
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Main Card
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Main Card
-
-
-
- Sat, Feb 22 / 9:00 PM EST
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #7
-
-
Bantamweight Bout
-
- #8
-
-
-
-
-
-
-
-
-
-
-
- #7
-
-
Bantamweight Bout
-
- #8
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
United States
-
-
-
- +190
-
- odds
-
- -230
-
-
-
-
-
China
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #9
-
-
Middleweight Bout
-
- #12
-
-
-
-
-
-
-
-
-
-
-
- #9
-
-
Middleweight Bout
-
- #12
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
United States
-
-
-
- -
-
- odds
-
- -
-
-
-
-
-
United States
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Featherweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Featherweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Brazil
-
-
-
- -395
-
- odds
-
- +310
-
-
-
-
-
Armenia
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #9
-
-
Bantamweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
- #9
-
-
Bantamweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Puerto Rico
-
-
-
- -
-
- odds
-
- -
-
-
-
-
-
United States
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #5
-
-
Heavyweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
- #5
-
-
Heavyweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
United States
-
-
-
- -
-
- odds
-
- -
-
-
-
-
-
Russia
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #15
-
-
Featherweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
- #15
-
-
Featherweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Brazil
-
-
-
- +114
-
- odds
-
- -135
-
-
-
-
-
United States
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Prelims
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Prelims
-
-
-
- Sat, Feb 22 / 6:00 PM EST
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Light Heavyweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Light Heavyweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Moldova
-
-
-
- +114
-
- odds
-
- -135
-
-
-
-
-
Türkiye
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Welterweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Welterweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
United States
-
-
-
- -
-
- odds
-
- -
-
-
-
-
-
United States
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #3
-
-
Women's Bantamweight Bout
-
- #5
-
-
-
-
-
-
-
-
-
-
-
- #3
-
-
Women's Bantamweight Bout
-
- #5
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Brazil
-
-
-
- -130
-
- odds
-
- +110
-
-
-
-
-
United States
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Bantamweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Bantamweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
United States
-
-
-
- -
-
- odds
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Middleweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Middleweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
United States
-
-
-
- -800
-
- odds
-
- +550
-
-
-
-
-
United States
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Light Heavyweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Light Heavyweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Lithuania
-
-
-
- -298
-
- odds
-
- +240
-
-
-
-
-
Brazil
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Early Prelims
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Get the advance word
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Main Card
-
-
-
-
-
-
-
- Prelims
-
-
- 6:00 PM EST
-
-
-
-
-
-
-
-
-
-
-
- Main Card
-
-
- 9:00 PM EST
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Tickets
-
-
-
-
-
-
-
-
-
- Presale
- -
- UFC Fight Club
-
-
-
-
-
-
-
-
-
-
- Presale
- -
- UFC Newsletter
-
-
-
-
-
-
-
-
-
-
- On Sale
- -
- Public
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Watch On-the-Go
-
-
-
-
-
-
-
- Download the UFC Mobile App for past & live fights and more!
-
-
-
-
-
-
-
-
-
-
-
-
Main Card
-
-
-
-
-
-
-
- Prelims
-
-
- 6:00 PM EST
-
-
-
-
-
-
-
-
-
-
-
- Main Card
-
-
- 9:00 PM EST
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Tickets
-
-
-
-
-
-
-
-
-
- Presale
- -
- UFC Fight Club
-
-
-
-
-
-
-
-
-
-
- Presale
- -
- UFC Newsletter
-
-
-
-
-
-
-
-
-
-
- On Sale
- -
- Public
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Watch On-the-Go
-
-
-
-
-
-
-
- Download the UFC Mobile App for past & live fights and more!
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Fans voices come first
-
-
Favorite athlete? Fantasy match-ups? Comments? Leave 'em here!
-
-
-
-
-
-
-
-
-
- Share
-
-
-
-
-
-
-
-
-
-
- Comments
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/testdata/ufc-fn-mar-1.html b/src/testdata/ufc-fn-mar-1.html
deleted file mode 100644
index 86c2f7b..0000000
--- a/src/testdata/ufc-fn-mar-1.html
+++ /dev/null
@@ -1,4865 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- UFC Fight Night: Royval vs Kape
-
-
-
-
-
-
-
-
-
-
-
-
-
- Skip to main content
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Sat, Mar 1 / 7:00 PM EST
-
-
-
UFC APEX,
- Las Vegas United States
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- UFC Fight Night
-
-
-
-
- Sat, Mar 1 / 7:00 PM EST
-
-
-
-
-
- Sat, Mar 1 / 7:00 PM EST
- .
- UFC APEX,
- Las Vegas United States
-
-
-
-
-
-
-
-
-
-
-
-
-
- How to watch
-
-
-
-
-
-
-
-
-
-
-
-
-
- Sponsored By
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Main Card
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Main Card
-
-
-
- Sat, Mar 1 / 7:00 PM EST
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #1
-
-
Flyweight Bout
-
- #6
-
-
-
-
-
-
-
-
-
-
-
- #1
-
-
Flyweight Bout
-
- #6
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
United States
-
-
-
- +180
-
- odds
-
- -218
-
-
-
-
-
Angola
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Middleweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Middleweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
United States
-
-
-
- -
-
- odds
-
- -
-
-
-
-
-
United States
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Lightweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Lightweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Morocco
-
-
-
- -
-
- odds
-
- -
-
-
-
-
-
Argentina
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Heavyweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Heavyweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
United States
-
-
-
- -
-
- odds
-
- -
-
-
-
-
-
Portugal
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Featherweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Featherweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Philippines
-
-
-
- -
-
- odds
-
- -
-
-
-
-
-
France
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Prelims
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Prelims
-
-
-
- Sat, Mar 1 / 4:00 PM EST
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Featherweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Featherweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Brazil
-
-
-
- -
-
- odds
-
- -
-
-
-
-
-
United States
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Bantamweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Bantamweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Brazil
-
-
-
- -
-
- odds
-
- -
-
-
-
-
-
United States
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Women's Flyweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Women's Flyweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
United States
-
-
-
- -
-
- odds
-
- -
-
-
-
-
-
United States
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Welterweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Welterweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
United States
-
-
-
- -
-
- odds
-
- -
-
-
-
-
-
England
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Women's Flyweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Women's Flyweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
United States
-
-
-
- -
-
- odds
-
- -
-
-
-
-
-
Brazil
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Featherweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Featherweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
United States
-
-
-
- -
-
- odds
-
- -
-
-
-
-
-
Brazil
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #12
-
-
Flyweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
- #12
-
-
Flyweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
United States
-
-
-
- -
-
- odds
-
- -
-
-
-
-
-
Uzbekistan
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Early Prelims
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Get the advance word
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Main Card
-
-
-
-
-
-
-
- Prelims
-
-
- 4:00 PM EST
-
-
-
-
-
-
-
-
-
-
-
- Main Card
-
-
- 7:00 PM EST
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Watch On-the-Go
-
-
-
-
-
-
-
- Download the UFC Mobile App for past & live fights and more!
-
-
-
-
-
-
-
-
-
-
-
-
Main Card
-
-
-
-
-
-
-
- Prelims
-
-
- 4:00 PM EST
-
-
-
-
-
-
-
-
-
-
-
- Main Card
-
-
- 7:00 PM EST
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Watch On-the-Go
-
-
-
-
-
-
-
- Download the UFC Mobile App for past & live fights and more!
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Fans voices come first
-
-
Favorite athlete? Fantasy match-ups? Comments? Leave 'em here!
-
-
-
-
-
-
-
-
-
- Share
-
-
-
-
-
-
-
-
-
-
- Comments
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/testdata/ufc-fn-mar-15.html b/src/testdata/ufc-fn-mar-15.html
deleted file mode 100644
index f6fd5db..0000000
--- a/src/testdata/ufc-fn-mar-15.html
+++ /dev/null
@@ -1,1952 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- UFC Fight Night: Vettori vs Dolidze 2
-
-
-
-
-
-
-
-
-
-
-
-
-
- Skip to main content
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Sat, Mar 15 / 7:00 PM EDT
-
-
-
UFC APEX,
- Las Vegas United States
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- UFC Fight Night
-
-
-
-
- Sat, Mar 15 / 7:00 PM EDT
-
-
-
-
-
- Sat, Mar 15 / 7:00 PM EDT
- .
- UFC APEX,
- Las Vegas United States
-
-
-
-
-
-
-
-
-
-
-
-
-
- How to watch
-
-
-
-
-
-
-
-
-
-
-
-
-
- Sponsored By
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Fight Card
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #8
-
-
Middleweight Bout
-
- #10
-
-
-
-
-
-
-
-
-
-
-
- #8
-
-
Middleweight Bout
-
- #10
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Italy
-
-
-
- -
-
- odds
-
- -
-
-
-
-
-
Georgia
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Flyweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Flyweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Spain
-
-
-
- -
-
- odds
-
- -
-
-
-
-
-
Brazil
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Get the advance word
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Main Card
-
-
-
-
-
-
-
- Prelims
-
-
- 4:00 PM EDT
-
-
-
-
-
-
-
-
-
-
-
- Main Card
-
-
- 7:00 PM EDT
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Watch On-the-Go
-
-
-
-
-
-
-
- Download the UFC Mobile App for past & live fights and more!
-
-
-
-
-
-
-
-
-
-
-
-
Main Card
-
-
-
-
-
-
-
- Prelims
-
-
- 4:00 PM EDT
-
-
-
-
-
-
-
-
-
-
-
- Main Card
-
-
- 7:00 PM EDT
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Watch On-the-Go
-
-
-
-
-
-
-
- Download the UFC Mobile App for past & live fights and more!
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Fans voices come first
-
-
Favorite athlete? Fantasy match-ups? Comments? Leave 'em here!
-
-
-
-
-
-
-
-
-
- Share
-
-
-
-
-
-
-
-
-
-
- Comments
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/testdata/ufc-fn-mar-22.html b/src/testdata/ufc-fn-mar-22.html
deleted file mode 100644
index 8a3b016..0000000
--- a/src/testdata/ufc-fn-mar-22.html
+++ /dev/null
@@ -1,4498 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- UFC Fight Night: Edwards vs Della Maddalena | UFC
-
-
-
-
-
-
-
-
-
-
-
-
-
- Skip to main content
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Sat, Mar 22 / 3:00 PM EDT
-
-
-
O2 Arena,
- London United Kingdom
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- UFC Fight Night
-
-
-
-
- Sat, Mar 22 / 3:00 PM EDT
-
-
-
-
-
- Sat, Mar 22 / 3:00 PM EDT
- .
- O2 Arena,
- London United Kingdom
-
-
-
-
-
-
-
-
-
-
-
-
-
- How to watch
-
-
-
-
-
-
-
-
-
-
-
-
-
- Sponsored By
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Fight Card
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #1
-
-
Welterweight Bout
-
- #4
-
-
-
-
-
-
-
-
-
-
-
- #1
-
-
Welterweight Bout
-
- #4
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
England
-
-
-
- -
-
- odds
-
- -
-
-
-
-
-
Australia
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #3
-
-
Light Heavyweight Bout
-
- #6
-
-
-
-
-
-
-
-
-
-
-
- #3
-
-
Light Heavyweight Bout
-
- #6
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Poland
-
-
-
- +225
-
- odds
-
- -278
-
-
-
-
-
New Zealand
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Women's Strawweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Women's Strawweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
England
-
-
-
- -
-
- odds
-
- -
-
-
-
-
-
Brazil
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #15
-
-
Light Heavyweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
- #15
-
-
Light Heavyweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
United States
-
-
-
- -
-
- odds
-
- -
-
-
-
-
-
France
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Lightweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Lightweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
England
-
-
-
- -
-
- odds
-
- -
-
-
-
-
-
United States
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Welterweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Welterweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Iceland
-
-
-
- -
-
- odds
-
- -
-
-
-
-
-
United States
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Lightweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Lightweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
England
-
-
-
- -
-
- odds
-
- -
-
-
-
-
-
Scotland
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #8
-
-
Heavyweight Bout
-
- #13
-
-
-
-
-
-
-
-
-
-
-
- #8
-
-
Heavyweight Bout
-
- #13
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Poland
-
-
-
- -
-
- odds
-
- -
-
-
-
-
-
England
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Flyweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Flyweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
England
-
-
-
- -
-
- odds
-
- -
-
-
-
-
-
Brazil
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Middleweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Middleweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
England
-
-
-
- -
-
- odds
-
- -
-
-
-
-
-
Russia
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Women's Strawweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Women's Strawweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Ireland
-
-
-
- -
-
- odds
-
- -
-
-
-
-
-
India
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Featherweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Featherweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
England
-
-
-
- -
-
- odds
-
- -
-
-
-
-
-
France
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Bantamweight Bout
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Bantamweight Bout
-
-
-
-
-
-
-
Live now
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
England
-
-
-
- -
-
- odds
-
- -
-
-
-
-
-
Ireland
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Get the advance word
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Main Card
-
-
-
-
-
-
-
- Prelims
-
-
- 12:00 PM EDT
-
-
-
-
-
-
-
-
-
-
-
- Main Card
-
-
- 3:00 PM EDT
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Tickets
-
-
-
-
-
-
-
-
-
- Presale
- -
- UFC Fight Club
-
-
-
-
-
-
-
-
-
-
- Presale
- -
- UFC Newsletter
-
-
-
-
-
-
-
-
-
-
- On Sale
- -
- Public
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Watch On-the-Go
-
-
-
-
-
-
-
- Download the UFC Mobile App for past & live fights and more!
-
-
-
-
-
-
-
-
-
-
-
-
Main Card
-
-
-
-
-
-
-
- Prelims
-
-
- 12:00 PM EDT
-
-
-
-
-
-
-
-
-
-
-
- Main Card
-
-
- 3:00 PM EDT
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Tickets
-
-
-
-
-
-
-
-
-
- Presale
- -
- UFC Fight Club
-
-
-
-
-
-
-
-
-
-
- Presale
- -
- UFC Newsletter
-
-
-
-
-
-
-
-
-
-
- On Sale
- -
- Public
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Watch On-the-Go
-
-
-
-
-
-
-
- Download the UFC Mobile App for past & live fights and more!
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Fans voices come first
-
-
Favorite athlete? Fantasy match-ups? Comments? Leave 'em here!
-
-
-
-
-
-
-
-
-
- Share
-
-
-
-
-
-
-
-
-
-
- Comments
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/testdata/ufc-fn-mar-29.html b/src/testdata/ufc-fn-mar-29.html
deleted file mode 100644
index e9985a5..0000000
--- a/src/testdata/ufc-fn-mar-29.html
+++ /dev/null
@@ -1,1318 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- UFC Fight Night | TBD vs TBD | UFC
-
-
-
-
-
-
-
-
-
-
-
-
-
- Skip to main content
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Sat, Mar 29 / 7:00 PM EDT
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- UFC Fight Night
-
-
-
-
- Sat, Mar 29 / 7:00 PM EDT
-
-
-
-
-
- Sat, Mar 29 / 7:00 PM EDT
- .
-
-
-
-
-
-
-
-
-
- How to watch
-
-
-
-
-
-
-
-
-
-
-
-
-
- Sponsored By
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Main Card
-
-
-
-
-
-
-
- Prelims
-
-
- 4:00 PM EDT
-
-
-
-
-
-
-
-
-
-
-
- Main Card
-
-
- 7:00 PM EDT
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Watch On-the-Go
-
-
-
-
-
-
-
- Download the UFC Mobile App for past & live fights and more!
-
-
-
-
-
-
-
-
-
-
-
-
Main Card
-
-
-
-
-
-
-
- Prelims
-
-
- 4:00 PM EDT
-
-
-
-
-
-
-
-
-
-
-
- Main Card
-
-
- 7:00 PM EDT
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Watch On-the-Go
-
-
-
-
-
-
-
- Download the UFC Mobile App for past & live fights and more!
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Fans voices come first
-
-
Favorite athlete? Fantasy match-ups? Comments? Leave 'em here!
-
-
-
-
-
-
-
-
-
- Share
-
-
-
-
-
-
-
-
-
-
- Comments
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-