[{"data":1,"prerenderedAt":3074},["ShallowReactive",2],{"navLinks":3,"sidebar_docs_navigation_\u002Fdocs\u002Fshield-base":64,"navigation":138,"navLinks_footer":802,"\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fuseragent_page":815,"\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fuseragent_surround":2056,"\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fuseragent":2059},{"id":4,"extension":5,"links":6,"meta":61,"stem":62,"__hash__":63},"navigationMenu\u002Fnavigation.json","json",[7,52,57],{"nested":8,"label":9,"icon":10,"to":11,"children":12},true,"Docs","i-lucide-book-open","\u002Fdocs\u002Fgetting-started",[13,19,26,32,39,45],{"label":14,"icon":15,"to":11,"description":16,"github":17,"badge":18},"Getting Started","i-lucide-rocket","An introduction to help you understand the core components.","https:\u002F\u002Fgithub.com\u002FSergo706\u002Fdocshub","Start Here",{"label":20,"icon":21,"to":22,"description":23,"github":24,"badge":25},"Auth H3 Client","i-lucide-key-round","\u002Fdocs\u002Fauth-h3client","Seamlessly enforce OAuth 2.0 authentication and session management integrated directly as the client of the IAM module.","https:\u002F\u002Fgithub.com\u002FSergo706\u002Fauth-h3client","Core",{"label":27,"icon":28,"to":29,"description":30,"github":31,"badge":25},"IAM","i-lucide-shield-check","\u002Fdocs\u002Fiam","Identity and Access Management featuring granular roles, permissions, and security policies.","https:\u002F\u002Fgithub.com\u002FSergo706\u002Fauth",{"label":33,"icon":34,"to":35,"description":36,"github":37,"badge":38},"Bot Detection","i-lucide-cpu","\u002Fdocs\u002Fbot-detection","Advanced behavioral analysis and request fingerprinting to stop malicious automated traffic.","https:\u002F\u002Fgithub.com\u002FSergo706\u002Fbot-detector","Security",{"label":40,"icon":41,"to":42,"description":43,"github":44,"badge":38},"Shield Base","i-lucide-database-zap","\u002Fdocs\u002Fshield-base","CLI and programmatic toolkit for compiling offline-ready IP intelligence databases from BGP, GeoIP, Tor, FireHOL, and other public threat feeds.","https:\u002F\u002Fgithub.com\u002FSergo706\u002Fshield-base-cli",{"label":46,"icon":47,"to":48,"description":49,"github":50,"badge":51},"Utils","i-lucide-wrench","\u002Fdocs\u002Futils","A standard library of highly optimized helpers for formatting, validation, and core logic.","https:\u002F\u002Fgithub.com\u002FSergo706\u002Futils","Library",{"nested":53,"label":54,"icon":55,"to":56},false,"Blog","i-lucide-pen-line","\u002Fblog",{"nested":53,"label":58,"icon":59,"to":60},"Website","lucide:app-window-mac","https:\u002F\u002Friavzon.com",{},"navigation","gkaQ0xRGxSLrLyM3kttLe0oBwkrR1EBjlepF8LSbwF8",[65],{"title":9,"path":66,"stem":67,"children":68,"page":53},"\u002Fdocs","docs",[69],{"title":40,"path":42,"stem":70,"children":71},"docs\u002Fshield-base\u002Findex",[72,73,76,80,122,126,130,134],{"title":40,"path":42,"stem":70},{"title":14,"path":74,"stem":75},"\u002Fdocs\u002Fshield-base\u002Fgetting-started","docs\u002Fshield-base\u002F00.getting-started",{"title":77,"path":78,"stem":79},"CLI Reference","\u002Fdocs\u002Fshield-base\u002Fcli","docs\u002Fshield-base\u002F01.cli",{"title":81,"path":82,"stem":83,"children":84},"Data Sources","\u002Fdocs\u002Fshield-base\u002Fdata-sources","docs\u002Fshield-base\u002F02.data-sources\u002Findex",[85,86,90,94,98,102,106,110,114,118],{"title":81,"path":82,"stem":83},{"title":87,"path":88,"stem":89},"BGP \u002F ASN","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fbgp","docs\u002Fshield-base\u002F02.data-sources\u002Fbgp",{"title":91,"path":92,"stem":93},"City Geolocation","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fcity","docs\u002Fshield-base\u002F02.data-sources\u002Fcity",{"title":95,"path":96,"stem":97},"Country Geolocation","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fcountry","docs\u002Fshield-base\u002F02.data-sources\u002Fcountry",{"title":99,"path":100,"stem":101},"Verified Crawlers","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fcrawlers","docs\u002Fshield-base\u002F02.data-sources\u002Fcrawlers",{"title":103,"path":104,"stem":105},"Disposable Emails","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Femail","docs\u002Fshield-base\u002F02.data-sources\u002Femail",{"title":107,"path":108,"stem":109},"FireHOL Threat Intelligence","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Ffirehol","docs\u002Fshield-base\u002F02.data-sources\u002Ffirehol",{"title":111,"path":112,"stem":113},"Proxy Detection","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fproxy","docs\u002Fshield-base\u002F02.data-sources\u002Fproxy",{"title":115,"path":116,"stem":117},"Tor Nodes","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Ftor","docs\u002Fshield-base\u002F02.data-sources\u002Ftor",{"title":119,"path":120,"stem":121},"Suspicious User-Agents","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fuseragent","docs\u002Fshield-base\u002F02.data-sources\u002Fuseragent",{"title":123,"path":124,"stem":125},"Programmatic Usage","\u002Fdocs\u002Fshield-base\u002Fusage","docs\u002Fshield-base\u002F03.usage",{"title":127,"path":128,"stem":129},"Custom Data Sources","\u002Fdocs\u002Fshield-base\u002Fcustom-data-sources","docs\u002Fshield-base\u002F04.custom-data-sources",{"title":131,"path":132,"stem":133},"TypeScript Types","\u002Fdocs\u002Fshield-base\u002Ftypes","docs\u002Fshield-base\u002F05.types",{"title":135,"path":136,"stem":137},"API Reference","\u002Fdocs\u002Fshield-base\u002Fapi","docs\u002Fshield-base\u002F06.api",[139],{"title":9,"path":66,"stem":67,"children":140,"page":53},[141,288,405,410,588,609],{"title":20,"path":22,"stem":142,"children":143},"docs\u002Fauth-h3client\u002Findex",[144,145,154,191,217,239,242,263,267],{"title":20,"path":22,"stem":142},{"title":14,"path":146,"stem":147,"children":148},"\u002Fdocs\u002Fauth-h3client\u002Fgetting-started","docs\u002Fauth-h3client\u002F00.getting-started\u002Findex",[149,150],{"title":14,"path":146,"stem":147},{"title":151,"path":152,"stem":153},"Nuxt Module","\u002Fdocs\u002Fauth-h3client\u002Fgetting-started\u002Fnuxt","docs\u002Fauth-h3client\u002F00.getting-started\u002F00.nuxt",{"title":155,"path":156,"stem":157,"children":158},"Essentials","\u002Fdocs\u002Fauth-h3client\u002Fessentials","docs\u002Fauth-h3client\u002F01.essentials\u002Findex",[159,160,164,168,172,176,180,183,187],{"title":155,"path":156,"stem":157},{"title":161,"path":162,"stem":163},"Session Management","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fsession","docs\u002Fauth-h3client\u002F01.essentials\u002F00.session",{"title":165,"path":166,"stem":167},"Route Protection","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Froute-protection","docs\u002Fauth-h3client\u002F01.essentials\u002F01.route-protection",{"title":169,"path":170,"stem":171},"CSRF Protection","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fcsrf","docs\u002Fauth-h3client\u002F01.essentials\u002F02.csrf",{"title":173,"path":174,"stem":175},"Auth Flows","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fauth-flows","docs\u002Fauth-h3client\u002F01.essentials\u002F03.auth-flows",{"title":177,"path":178,"stem":179},"OAuth and OIDC","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Foauth","docs\u002Fauth-h3client\u002F01.essentials\u002F04.oauth",{"title":33,"path":181,"stem":182},"\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fbot-detection","docs\u002Fauth-h3client\u002F01.essentials\u002F05.bot-detection",{"title":184,"path":185,"stem":186},"Cookies","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fcookies","docs\u002Fauth-h3client\u002F01.essentials\u002F06.cookies",{"title":188,"path":189,"stem":190},"Logging","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Flogging","docs\u002Fauth-h3client\u002F01.essentials\u002F07.logging",{"title":192,"path":193,"stem":194,"children":195},"MFA","\u002Fdocs\u002Fauth-h3client\u002Fmfa","docs\u002Fauth-h3client\u002F02.mfa\u002Findex",[196,197,201,205,209,213],{"title":192,"path":193,"stem":194},{"title":198,"path":199,"stem":200},"Built-in MFA","\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Fbuilt-in-flow","docs\u002Fauth-h3client\u002F02.mfa\u002F01.built-in-flow",{"title":202,"path":203,"stem":204},"Password Reset","\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Fpassword-reset","docs\u002Fauth-h3client\u002F02.mfa\u002F02.password-reset",{"title":206,"path":207,"stem":208},"Email Change","\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Femail-change","docs\u002Fauth-h3client\u002F02.mfa\u002F03.email-change",{"title":210,"path":211,"stem":212},"Custom MFA Flow","\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Fcustom-flow","docs\u002Fauth-h3client\u002F02.mfa\u002F04.custom-flow",{"title":214,"path":215,"stem":216},"Client-Side MFA","\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Fclient-side","docs\u002Fauth-h3client\u002F02.mfa\u002F05.client-side",{"title":218,"path":219,"stem":220,"children":221},"Client-side","\u002Fdocs\u002Fauth-h3client\u002Fclient","docs\u002Fauth-h3client\u002F03.client\u002Findex",[222,223,227,231,235],{"title":218,"path":219,"stem":220},{"title":224,"path":225,"stem":226},"useAuthData","\u002Fdocs\u002Fauth-h3client\u002Fclient\u002Fuse-auth-data","docs\u002Fauth-h3client\u002F03.client\u002F00.use-auth-data",{"title":228,"path":229,"stem":230},"useMagicLink","\u002Fdocs\u002Fauth-h3client\u002Fclient\u002Fuse-magic-link","docs\u002Fauth-h3client\u002F03.client\u002F01.use-magic-link",{"title":232,"path":233,"stem":234},"executeRequest","\u002Fdocs\u002Fauth-h3client\u002Fclient\u002Fexecute-request","docs\u002Fauth-h3client\u002F03.client\u002F02.execute-request",{"title":236,"path":237,"stem":238},"getCsrfToken","\u002Fdocs\u002Fauth-h3client\u002Fclient\u002Fget-csrf-token","docs\u002Fauth-h3client\u002F03.client\u002F03.get-csrf-token",{"title":38,"path":240,"stem":241},"\u002Fdocs\u002Fauth-h3client\u002Fsecurity","docs\u002Fauth-h3client\u002F04.security",{"title":243,"path":244,"stem":245,"children":246,"page":53},"Guides","\u002Fdocs\u002Fauth-h3client\u002Fguides","docs\u002Fauth-h3client\u002F05.guides",[247,251,255,259],{"title":248,"path":249,"stem":250},"H3 and Nitro Setup","\u002Fdocs\u002Fauth-h3client\u002Fguides\u002Fh3-nitro","docs\u002Fauth-h3client\u002F05.guides\u002F00.h3-nitro",{"title":252,"path":253,"stem":254},"HMAC Inter-service Auth","\u002Fdocs\u002Fauth-h3client\u002Fguides\u002Fhmac","docs\u002Fauth-h3client\u002F05.guides\u002Fhmac",{"title":256,"path":257,"stem":258},"Image Upload","\u002Fdocs\u002Fauth-h3client\u002Fguides\u002Fimage-upload","docs\u002Fauth-h3client\u002F05.guides\u002Fimage-upload",{"title":260,"path":261,"stem":262},"mTLS Configuration","\u002Fdocs\u002Fauth-h3client\u002Fguides\u002Fmtls","docs\u002Fauth-h3client\u002F05.guides\u002Fmtls",{"title":264,"path":265,"stem":266},"Configuration","\u002Fdocs\u002Fauth-h3client\u002Fconfiguration","docs\u002Fauth-h3client\u002F06.configuration",{"title":135,"path":268,"stem":269,"children":270},"\u002Fdocs\u002Fauth-h3client\u002Fapi","docs\u002Fauth-h3client\u002F07.api\u002Findex",[271,272,276,280,284],{"title":135,"path":268,"stem":269},{"title":273,"path":274,"stem":275},"Routes Reference","\u002Fdocs\u002Fauth-h3client\u002Fapi\u002Fcontrollers","docs\u002Fauth-h3client\u002F07.api\u002F00.controllers",{"title":277,"path":278,"stem":279},"Middleware Reference","\u002Fdocs\u002Fauth-h3client\u002Fapi\u002Fmiddleware","docs\u002Fauth-h3client\u002F07.api\u002F01.middleware",{"title":281,"path":282,"stem":283},"Client-side Reference","\u002Fdocs\u002Fauth-h3client\u002Fapi\u002Fcomposables","docs\u002Fauth-h3client\u002F07.api\u002F02.composables",{"title":285,"path":286,"stem":287},"Utilities","\u002Fdocs\u002Fauth-h3client\u002Fapi\u002Futilities","docs\u002Fauth-h3client\u002F07.api\u002F03.utilities",{"title":289,"path":35,"stem":290,"children":291},"Bot Detector","docs\u002Fbot-detection\u002Findex",[292,293,296,300,303,322,396,399,402],{"title":289,"path":35,"stem":290},{"title":14,"path":294,"stem":295},"\u002Fdocs\u002Fbot-detection\u002Fgetting-started","docs\u002Fbot-detection\u002F00.getting-started",{"title":297,"path":298,"stem":299},"CLI","\u002Fdocs\u002Fbot-detection\u002Fcli","docs\u002Fbot-detection\u002F01.cli",{"title":81,"path":301,"stem":302},"\u002Fdocs\u002Fbot-detection\u002Fdata-sources","docs\u002Fbot-detection\u002F02.data-sources",{"title":243,"path":304,"stem":305,"children":306,"page":53},"\u002Fdocs\u002Fbot-detection\u002Fguides","docs\u002Fbot-detection\u002F03.guides",[307,311,315,318],{"title":308,"path":309,"stem":310},"Custom Checkers","\u002Fdocs\u002Fbot-detection\u002Fguides\u002Fcustom","docs\u002Fbot-detection\u002F03.guides\u002FCUSTOM",{"title":312,"path":313,"stem":314},"Scheduling Database Generation","\u002Fdocs\u002Fbot-detection\u002Fguides\u002Fgenerate","docs\u002Fbot-detection\u002F03.guides\u002FGENERATE",{"title":188,"path":316,"stem":317},"\u002Fdocs\u002Fbot-detection\u002Fguides\u002Flogging","docs\u002Fbot-detection\u002F03.guides\u002FLOGGING",{"title":319,"path":320,"stem":321},"Score Modes and Reputation Healing","\u002Fdocs\u002Fbot-detection\u002Fguides\u002Fscore","docs\u002Fbot-detection\u002F03.guides\u002FSCORE",{"title":323,"path":324,"stem":325,"children":326},"Checkers","\u002Fdocs\u002Fbot-detection\u002Fcheckers","docs\u002Fbot-detection\u002F04.checkers\u002Findex",[327,328,332,336,340,344,348,352,356,360,364,368,372,376,380,384,388,392],{"title":323,"path":324,"stem":325},{"title":329,"path":330,"stem":331},"IP Validation","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fip-validation","docs\u002Fbot-detection\u002F04.checkers\u002F01.ip-validation",{"title":333,"path":334,"stem":335},"Good \u002F Bad Bot Verification","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fgood-bots","docs\u002Fbot-detection\u002F04.checkers\u002F02.good-bots",{"title":337,"path":338,"stem":339},"Browser & Device Fingerprint","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fbrowser-device","docs\u002Fbot-detection\u002F04.checkers\u002F03.browser-device",{"title":341,"path":342,"stem":343},"Locale Map","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Flocale-map","docs\u002Fbot-detection\u002F04.checkers\u002F04.locale-map",{"title":345,"path":346,"stem":347},"Known Threats","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fknown-threats","docs\u002Fbot-detection\u002F04.checkers\u002F05.known-threats",{"title":349,"path":350,"stem":351},"ASN Classification","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fasn-classification","docs\u002Fbot-detection\u002F04.checkers\u002F06.asn-classification",{"title":353,"path":354,"stem":355},"Tor Analysis","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Ftor-analysis","docs\u002Fbot-detection\u002F04.checkers\u002F07.tor-analysis",{"title":357,"path":358,"stem":359},"Timezone Consistency","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Ftimezone-consistency","docs\u002Fbot-detection\u002F04.checkers\u002F08.timezone-consistency",{"title":361,"path":362,"stem":363},"Honeypot","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fhoneypot","docs\u002Fbot-detection\u002F04.checkers\u002F09.honeypot",{"title":365,"path":366,"stem":367},"Known Bad IPs","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fknown-bad-ips","docs\u002Fbot-detection\u002F04.checkers\u002F10.known-bad-ips",{"title":369,"path":370,"stem":371},"Behavior Rate","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fbehavior-rate","docs\u002Fbot-detection\u002F04.checkers\u002F11.behavior-rate",{"title":373,"path":374,"stem":375},"Proxy \u002F ISP \u002F Cookie","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fproxy-isp-cookies","docs\u002Fbot-detection\u002F04.checkers\u002F12.proxy-isp-cookies",{"title":377,"path":378,"stem":379},"Session Coherence","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fsession-coherence","docs\u002Fbot-detection\u002F04.checkers\u002F13.session-coherence",{"title":381,"path":382,"stem":383},"Velocity Fingerprint","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fvelocity-fingerprint","docs\u002Fbot-detection\u002F04.checkers\u002F14.velocity-fingerprint",{"title":385,"path":386,"stem":387},"UA & Header Analysis","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fua-header","docs\u002Fbot-detection\u002F04.checkers\u002F15.ua-header",{"title":389,"path":390,"stem":391},"Geolocation","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fgeolocation","docs\u002Fbot-detection\u002F04.checkers\u002F16.geolocation",{"title":393,"path":394,"stem":395},"Known Bad User-Agents","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fknown-bad-ua","docs\u002Fbot-detection\u002F04.checkers\u002F17.known-bad-ua",{"title":38,"path":397,"stem":398},"\u002Fdocs\u002Fbot-detection\u002Fsecurity","docs\u002Fbot-detection\u002F04.security",{"title":135,"path":400,"stem":401},"\u002Fdocs\u002Fbot-detection\u002Fapi","docs\u002Fbot-detection\u002F05.api",{"title":264,"path":403,"stem":404},"\u002Fdocs\u002Fbot-detection\u002Fconfiguration","docs\u002Fbot-detection\u002F06.configuration",{"title":406,"path":11,"stem":407,"children":408},"Introduction","docs\u002Fgetting-started\u002Findex",[409],{"title":406,"path":11,"stem":407},{"title":27,"path":29,"stem":411,"children":412},"docs\u002Fiam\u002Findex",[413,414,417,552,555,571,574],{"title":27,"path":29,"stem":411},{"title":14,"path":415,"stem":416},"\u002Fdocs\u002Fiam\u002Fgetting-started","docs\u002Fiam\u002F00.getting-started",{"title":155,"path":418,"stem":419,"children":420},"\u002Fdocs\u002Fiam\u002Fessentials","docs\u002Fiam\u002F01.essentials\u002Findex",[421,422,426,430,434,438,442,446,450,454,458,462,465,469,473,477,481,484,488,492,495,499,502],{"title":155,"path":418,"stem":419},{"title":423,"path":424,"stem":425},"Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Ftokens","docs\u002Fiam\u002F01.essentials\u002F00.tokens",{"title":427,"path":428,"stem":429},"Access Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Faccess-tokens","docs\u002Fiam\u002F01.essentials\u002F01.access-tokens",{"title":431,"path":432,"stem":433},"Refresh Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Frefresh-tokens","docs\u002Fiam\u002F01.essentials\u002F02.refresh-tokens",{"title":435,"path":436,"stem":437},"Anomaly Detection","\u002Fdocs\u002Fiam\u002Fessentials\u002Fanomalies","docs\u002Fiam\u002F01.essentials\u002F03.anomalies",{"title":439,"path":440,"stem":441},"Signup","\u002Fdocs\u002Fiam\u002Fessentials\u002Fsignup","docs\u002Fiam\u002F01.essentials\u002F04.signup",{"title":443,"path":444,"stem":445},"Login","\u002Fdocs\u002Fiam\u002Fessentials\u002Flogin","docs\u002Fiam\u002F01.essentials\u002F05.login",{"title":447,"path":448,"stem":449},"Logout","\u002Fdocs\u002Fiam\u002Fessentials\u002Flogout","docs\u002Fiam\u002F01.essentials\u002F06.logout",{"title":451,"path":452,"stem":453},"OAuth","\u002Fdocs\u002Fiam\u002Fessentials\u002Foauth","docs\u002Fiam\u002F01.essentials\u002F07.oauth",{"title":455,"path":456,"stem":457},"Magic Links","\u002Fdocs\u002Fiam\u002Fessentials\u002Fmagic-links","docs\u002Fiam\u002F01.essentials\u002F08.magic-links",{"title":459,"path":460,"stem":461},"Emails","\u002Fdocs\u002Fiam\u002Fessentials\u002Femails","docs\u002Fiam\u002F01.essentials\u002F09.emails",{"title":192,"path":463,"stem":464},"\u002Fdocs\u002Fiam\u002Fessentials\u002Fmfa","docs\u002Fiam\u002F01.essentials\u002F10.mfa",{"title":466,"path":467,"stem":468},"Fingerprinting","\u002Fdocs\u002Fiam\u002Fessentials\u002Ffingerprinting","docs\u002Fiam\u002F01.essentials\u002F11.fingerprinting",{"title":470,"path":471,"stem":472},"Backend for Frontend","\u002Fdocs\u002Fiam\u002Fessentials\u002Fbff","docs\u002Fiam\u002F01.essentials\u002F12.bff",{"title":474,"path":475,"stem":476},"HMAC Authentication","\u002Fdocs\u002Fiam\u002Fessentials\u002Fhmac","docs\u002Fiam\u002F01.essentials\u002F13.hmac",{"title":478,"path":479,"stem":480},"XSS Protection","\u002Fdocs\u002Fiam\u002Fessentials\u002Fxss","docs\u002Fiam\u002F01.essentials\u002F14.xss",{"title":188,"path":482,"stem":483},"\u002Fdocs\u002Fiam\u002Fessentials\u002Flogging","docs\u002Fiam\u002F01.essentials\u002F15.logging",{"title":485,"path":486,"stem":487},"Rate Limiting","\u002Fdocs\u002Fiam\u002Fessentials\u002Frate-limiting","docs\u002Fiam\u002F01.essentials\u002F16.rate-limiting",{"title":489,"path":490,"stem":491},"Database","\u002Fdocs\u002Fiam\u002Fessentials\u002Fdatabase","docs\u002Fiam\u002F01.essentials\u002F17.database",{"title":184,"path":493,"stem":494},"\u002Fdocs\u002Fiam\u002Fessentials\u002Fcookies","docs\u002Fiam\u002F01.essentials\u002F18.cookies",{"title":496,"path":497,"stem":498},"Service Startup","\u002Fdocs\u002Fiam\u002Fessentials\u002Fservice","docs\u002Fiam\u002F01.essentials\u002F19.service",{"title":202,"path":500,"stem":501},"\u002Fdocs\u002Fiam\u002Fessentials\u002Fpassword-reset","docs\u002Fiam\u002F01.essentials\u002F20.password-reset",{"title":503,"path":504,"stem":505,"children":506},"API Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi","docs\u002Fiam\u002F01.essentials\u002F21.api\u002Findex",[507,508,512,516,546,549],{"title":503,"path":504,"stem":505},{"title":509,"path":510,"stem":511},"Creating Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fcreation","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F00.creation",{"title":513,"path":514,"stem":515},"Verifying Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fverification","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F01.verification",{"title":517,"path":518,"stem":519,"children":520},"Manage Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002Findex",[521,522,526,530,534,538,542],{"title":517,"path":518,"stem":519},{"title":523,"path":524,"stem":525},"Privileges","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Fprivilege","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F00.privilege",{"title":527,"path":528,"stem":529},"Revocation","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Frevocation","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F01.revocation",{"title":531,"path":532,"stem":533},"Rotation","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Frotation","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F02.rotation",{"title":535,"path":536,"stem":537},"IP Restriction","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Fip-updates","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F03.ip-updates",{"title":539,"path":540,"stem":541},"Metadata","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Fmetadata","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F04.metadata",{"title":543,"path":544,"stem":545},"Token Listing","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Flist","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F05.list",{"title":485,"path":547,"stem":548},"\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Frate-limiting","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F03.rate-limiting",{"title":38,"path":550,"stem":551},"\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fsecurity","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F04.security",{"title":38,"path":553,"stem":554},"\u002Fdocs\u002Fiam\u002Fsecurity","docs\u002Fiam\u002F02.security",{"title":243,"path":556,"stem":557,"children":558,"page":53},"\u002Fdocs\u002Fiam\u002Fguides","docs\u002Fiam\u002F03.guides",[559,563,567],{"title":560,"path":561,"stem":562},"Deployment","\u002Fdocs\u002Fiam\u002Fguides\u002Fdeployment","docs\u002Fiam\u002F03.guides\u002Fdeployment",{"title":564,"path":565,"stem":566},"Operation Scripts","\u002Fdocs\u002Fiam\u002Fguides\u002Foperation-scripts","docs\u002Fiam\u002F03.guides\u002Foperation-scripts",{"title":568,"path":569,"stem":570},"Role-Based Access Control","\u002Fdocs\u002Fiam\u002Fguides\u002Frbac","docs\u002Fiam\u002F03.guides\u002Frbac",{"title":264,"path":572,"stem":573},"\u002Fdocs\u002Fiam\u002Fconfiguration","docs\u002Fiam\u002F04.configuration",{"title":575,"path":576,"stem":577,"children":578,"page":53},"Api","\u002Fdocs\u002Fiam\u002Fapi","docs\u002Fiam\u002F05.API",[579,582,585],{"title":135,"path":580,"stem":581},"\u002Fdocs\u002Fiam\u002Fapi\u002Fapi","docs\u002Fiam\u002F05.API\u002F00.api",{"title":277,"path":583,"stem":584},"\u002Fdocs\u002Fiam\u002Fapi\u002Fmiddlewares","docs\u002Fiam\u002F05.API\u002F02.middlewares",{"title":273,"path":586,"stem":587},"\u002Fdocs\u002Fiam\u002Fapi\u002Froutes","docs\u002Fiam\u002F05.API\u002F03.routes",{"title":40,"path":42,"stem":70,"children":589},[590,591,592,593,605,606,607,608],{"title":40,"path":42,"stem":70},{"title":14,"path":74,"stem":75},{"title":77,"path":78,"stem":79},{"title":81,"path":82,"stem":83,"children":594},[595,596,597,598,599,600,601,602,603,604],{"title":81,"path":82,"stem":83},{"title":87,"path":88,"stem":89},{"title":91,"path":92,"stem":93},{"title":95,"path":96,"stem":97},{"title":99,"path":100,"stem":101},{"title":103,"path":104,"stem":105},{"title":107,"path":108,"stem":109},{"title":111,"path":112,"stem":113},{"title":115,"path":116,"stem":117},{"title":119,"path":120,"stem":121},{"title":123,"path":124,"stem":125},{"title":127,"path":128,"stem":129},{"title":131,"path":132,"stem":133},{"title":135,"path":136,"stem":137},{"title":285,"path":48,"stem":610,"children":611},"docs\u002Futils\u002Findex",[612,613,630,663,760],{"title":285,"path":48,"stem":610},{"title":614,"path":615,"stem":616,"children":617,"page":53},"Eslint","\u002Fdocs\u002Futils\u002Feslint","docs\u002Futils\u002Feslint",[618,622,626],{"title":619,"path":620,"stem":621},"React Config","\u002Fdocs\u002Futils\u002Feslint\u002Freact","docs\u002Futils\u002Feslint\u002Freact",{"title":623,"path":624,"stem":625},"TypeScript Config","\u002Fdocs\u002Futils\u002Feslint\u002Ftypescript","docs\u002Futils\u002Feslint\u002Ftypescript",{"title":627,"path":628,"stem":629},"Vue Config","\u002Fdocs\u002Futils\u002Feslint\u002Fvue","docs\u002Futils\u002Feslint\u002Fvue",{"title":631,"path":632,"stem":633,"children":634,"page":53},"Server","\u002Fdocs\u002Futils\u002Fserver","docs\u002Futils\u002Fserver",[635,639,643,647,651,655,659],{"title":636,"path":637,"stem":638},"Encryption","\u002Fdocs\u002Futils\u002Fserver\u002Fencryption","docs\u002Futils\u002Fserver\u002Fencryption",{"title":640,"path":641,"stem":642},"Path Resolver","\u002Fdocs\u002Futils\u002Fserver\u002Fpathresolver","docs\u002Futils\u002Fserver\u002FpathResolver",{"title":644,"path":645,"stem":646},"File Replacements","\u002Fdocs\u002Futils\u002Fserver\u002Freplace","docs\u002Futils\u002Fserver\u002Freplace",{"title":648,"path":649,"stem":650},"run","\u002Fdocs\u002Futils\u002Fserver\u002Frun","docs\u002Futils\u002Fserver\u002Frun",{"title":652,"path":653,"stem":654},"scheduleTask","\u002Fdocs\u002Futils\u002Fserver\u002Fscheduletask","docs\u002Futils\u002Fserver\u002FscheduleTask",{"title":656,"path":657,"stem":658},"spawnRun","\u002Fdocs\u002Futils\u002Fserver\u002Fspawnrun","docs\u002Futils\u002Fserver\u002FspawnRun",{"title":660,"path":661,"stem":662},"uploadCsv","\u002Fdocs\u002Futils\u002Fserver\u002Fuploadcsv","docs\u002Futils\u002Fserver\u002FuploadCsv",{"title":664,"path":665,"stem":666,"children":667,"page":53},"Shared","\u002Fdocs\u002Futils\u002Fshared","docs\u002Futils\u002Fshared",[668,672,676,680,684,688,692,696,700,704,708,712,716,720,724,728,732,736,740,744,748,752,756],{"title":669,"path":670,"stem":671},"BatchQueue","\u002Fdocs\u002Futils\u002Fshared\u002Fbatchqueue","docs\u002Futils\u002Fshared\u002FbatchQueue",{"title":673,"path":674,"stem":675},"capitalize","\u002Fdocs\u002Futils\u002Fshared\u002Fcapitalize","docs\u002Futils\u002Fshared\u002Fcapitalize",{"title":677,"path":678,"stem":679},"chunkProcess","\u002Fdocs\u002Futils\u002Fshared\u002Fchunkprocess","docs\u002Futils\u002Fshared\u002FchunkProcess",{"title":681,"path":682,"stem":683},"cleanObject","\u002Fdocs\u002Futils\u002Fshared\u002Fcleanobject","docs\u002Futils\u002Fshared\u002FcleanObject",{"title":685,"path":686,"stem":687},"createConfigManager","\u002Fdocs\u002Futils\u002Fshared\u002Fconfigurationdefiner","docs\u002Futils\u002Fshared\u002FconfigurationDefiner",{"title":689,"path":690,"stem":691},"debounce","\u002Fdocs\u002Futils\u002Fshared\u002Fdebounce","docs\u002Futils\u002Fshared\u002Fdebounce",{"title":693,"path":694,"stem":695},"ensureArray","\u002Fdocs\u002Futils\u002Fshared\u002Fensurearray","docs\u002Futils\u002Fshared\u002FensureArray",{"title":697,"path":698,"stem":699},"fetchWithRetry","\u002Fdocs\u002Futils\u002Fshared\u002Ffetchwithretry","docs\u002Futils\u002Fshared\u002FfetchWithRetry",{"title":701,"path":702,"stem":703},"filterEmptyValues","\u002Fdocs\u002Futils\u002Fshared\u002Ffilteremptyvalues","docs\u002Futils\u002Fshared\u002FfilterEmptyValues",{"title":705,"path":706,"stem":707},"findStringsInObject","\u002Fdocs\u002Futils\u002Fshared\u002Ffindobjectvalues","docs\u002Futils\u002Fshared\u002FfindObjectValues",{"title":709,"path":710,"stem":711},"fisherYatesShuffle","\u002Fdocs\u002Futils\u002Fshared\u002Ffisheryatesshuffle","docs\u002Futils\u002Fshared\u002FfisherYatesShuffle",{"title":713,"path":714,"stem":715},"getRandomImage","\u002Fdocs\u002Futils\u002Fshared\u002Fgetrandomimage","docs\u002Futils\u002Fshared\u002FgetRandomImage",{"title":717,"path":718,"stem":719},"isObjectHasValues","\u002Fdocs\u002Futils\u002Fshared\u002Fisobjecthasvalues","docs\u002Futils\u002Fshared\u002FisObjectHasValues",{"title":721,"path":722,"stem":723},"isAsyncOrPromise","\u002Fdocs\u002Futils\u002Fshared\u002Fispromise","docs\u002Futils\u002Fshared\u002FisPromise",{"title":725,"path":726,"stem":727},"MiniCache","\u002Fdocs\u002Futils\u002Fshared\u002Fminicache","docs\u002Futils\u002Fshared\u002FminiCache",{"title":729,"path":730,"stem":731},"parseCookies","\u002Fdocs\u002Futils\u002Fshared\u002Fparserawcookies","docs\u002Futils\u002Fshared\u002FparseRawCookies",{"title":733,"path":734,"stem":735},"safeAction","\u002Fdocs\u002Futils\u002Fshared\u002Fpromiselocker","docs\u002Futils\u002Fshared\u002FpromiseLocker",{"title":737,"path":738,"stem":739},"Random","\u002Fdocs\u002Futils\u002Fshared\u002Frandom","docs\u002Futils\u002Fshared\u002Frandom",{"title":741,"path":742,"stem":743},"range","\u002Fdocs\u002Futils\u002Fshared\u002Frange","docs\u002Futils\u002Fshared\u002Frange",{"title":745,"path":746,"stem":747},"rateLimiters","\u002Fdocs\u002Futils\u002Fshared\u002Fratelimiters","docs\u002Futils\u002Fshared\u002FrateLimiters",{"title":749,"path":750,"stem":751},"safeObjectMerge","\u002Fdocs\u002Futils\u002Fshared\u002Fsafemerge","docs\u002Futils\u002Fshared\u002FsafeMerge",{"title":753,"path":754,"stem":755},"textTruncation","\u002Fdocs\u002Futils\u002Fshared\u002Ftexttruncation","docs\u002Futils\u002Fshared\u002FtextTruncation",{"title":757,"path":758,"stem":759},"validateZodSchema","\u002Fdocs\u002Futils\u002Fshared\u002Fvalidatezodschema","docs\u002Futils\u002Fshared\u002FvalidateZodSchema",{"title":761,"path":762,"stem":763,"children":764},"Utility Types","\u002Fdocs\u002Futils\u002Ftypes","docs\u002Futils\u002Ftypes\u002Findex",[765,766,770,774,778,782,786,790,794,798],{"title":761,"path":762,"stem":763},{"title":767,"path":768,"stem":769},"Brand","\u002Fdocs\u002Futils\u002Ftypes\u002Fbrand","docs\u002Futils\u002Ftypes\u002FBrand",{"title":771,"path":772,"stem":773},"DeepPartial","\u002Fdocs\u002Futils\u002Ftypes\u002Fdeeppartial","docs\u002Futils\u002Ftypes\u002FDeepPartial",{"title":775,"path":776,"stem":777},"Merge","\u002Fdocs\u002Futils\u002Ftypes\u002Fmerge","docs\u002Futils\u002Ftypes\u002FMerge",{"title":779,"path":780,"stem":781},"NonNullable","\u002Fdocs\u002Futils\u002Ftypes\u002Fnonnullable","docs\u002Futils\u002Ftypes\u002FNonNullable",{"title":783,"path":784,"stem":785},"Prettify","\u002Fdocs\u002Futils\u002Ftypes\u002Fprettify","docs\u002Futils\u002Ftypes\u002FPrettify",{"title":787,"path":788,"stem":789},"PromiseType","\u002Fdocs\u002Futils\u002Ftypes\u002Fpromisetype","docs\u002Futils\u002Ftypes\u002FPromiseType",{"title":791,"path":792,"stem":793},"RequireKeys","\u002Fdocs\u002Futils\u002Ftypes\u002Frequirekeys","docs\u002Futils\u002Ftypes\u002FRequireKeys",{"title":795,"path":796,"stem":797},"StandardResponse","\u002Fdocs\u002Futils\u002Ftypes\u002Fstandardresponse","docs\u002Futils\u002Ftypes\u002FStandardResponse",{"title":799,"path":800,"stem":801},"ValueOf","\u002Fdocs\u002Futils\u002Ftypes\u002Fvalueof","docs\u002Futils\u002Ftypes\u002FValueOf",{"id":4,"extension":5,"links":803,"meta":814,"stem":62,"__hash__":63},[804,812,813],{"nested":8,"label":9,"icon":10,"to":11,"children":805},[806,807,808,809,810,811],{"label":14,"icon":15,"to":11,"description":16,"github":17,"badge":18},{"label":20,"icon":21,"to":22,"description":23,"github":24,"badge":25},{"label":27,"icon":28,"to":29,"description":30,"github":31,"badge":25},{"label":33,"icon":34,"to":35,"description":36,"github":37,"badge":38},{"label":40,"icon":41,"to":42,"description":43,"github":44,"badge":38},{"label":46,"icon":47,"to":48,"description":49,"github":50,"badge":51},{"nested":53,"label":54,"icon":55,"to":56},{"nested":53,"label":58,"icon":59,"to":60},{},{"id":816,"title":119,"body":817,"description":2048,"extension":2049,"icon":2050,"meta":2051,"module":2052,"navigation":8,"path":120,"rawbody":2053,"seo":2054,"stem":121,"__hash__":2055},"docs\u002Fdocs\u002Fshield-base\u002F02.data-sources\u002Fuseragent.md",{"type":818,"value":819,"toc":2042},"minimark",[820,832,843,846,851,862,872,874,878,1087,1089,1093,1434,1436,1440,1447,1710,2029,2038],[821,822,823,824,831],"p",{},"This source downloads a curated CSV list of suspicious and malicious HTTP User-Agent strings from ",[825,826,830],"a",{"href":827,"rel":828},"https:\u002F\u002Fgithub.com\u002Fmthcht\u002Fawesome-lists\u002Ftree\u002Fmain\u002FLists",[829],"nofollow","mthcht\u002Fawesome-lists",". Use it to detect and block known bad clients at the request level. Each record includes regex patterns, severity ratings, tool metadata, and flow direction flags.",[821,833,834,838,839],{},[835,836,837],"strong",{},"Output file:"," ",[840,841,842],"code",{},"useragent-db\u002Fuseragent.mdb",[844,845],"hr",{},[847,848,850],"h2",{"id":849},"data-source","Data Source",[852,853,854],"ul",{},[855,856,857,858],"li",{},"Suspicious user-agents CSV: ",[825,859,830],{"href":860,"rel":861},"https:\u002F\u002Fraw.githubusercontent.com\u002Fmthcht\u002Fawesome-lists\u002Frefs\u002Fheads\u002Fmain\u002FLists\u002Fsuspicious_http_user_agents_list.csv",[829],[863,864,865],"note",{},[821,866,867,868,871],{},"A ",[840,869,870],{},"useragent.mdb-lock"," file is generated automatically alongside the database. This file is required for concurrent access.",[844,873],{},[847,875,877],{"id":876},"usage","Usage",[879,880,881,910,926,941,956],"code-group",{},[882,883,889],"pre",{"className":884,"code":885,"filename":886,"language":887,"meta":888,"style":888},"language-bash shiki shiki-themes light-plus light-plus dracula","pnpm dlx @riavzon\u002Fshield-base --useragent\n","pnpm","bash","",[840,890,891],{"__ignoreMap":888},[892,893,896,899,903,906],"span",{"class":894,"line":895},"line",1,[892,897,886],{"class":898},"sHOzp",[892,900,902],{"class":901},"sFB1V"," dlx",[892,904,905],{"class":901}," @riavzon\u002Fshield-base",[892,907,909],{"class":908},"sjR7W"," --useragent\n",[882,911,914],{"className":884,"code":912,"filename":913,"language":887,"meta":888,"style":888},"yarn dlx @riavzon\u002Fshield-base --useragent\n","yarn",[840,915,916],{"__ignoreMap":888},[892,917,918,920,922,924],{"class":894,"line":895},[892,919,913],{"class":898},[892,921,902],{"class":901},[892,923,905],{"class":901},[892,925,909],{"class":908},[882,927,930],{"className":884,"code":928,"filename":929,"language":887,"meta":888,"style":888},"npx @riavzon\u002Fshield-base --useragent\n","npm",[840,931,932],{"__ignoreMap":888},[892,933,934,937,939],{"class":894,"line":895},[892,935,936],{"class":898},"npx",[892,938,905],{"class":901},[892,940,909],{"class":908},[882,942,945],{"className":884,"code":943,"filename":944,"language":887,"meta":888,"style":888},"bunx @riavzon\u002Fshield-base --useragent\n","bun",[840,946,947],{"__ignoreMap":888},[892,948,949,952,954],{"class":894,"line":895},[892,950,951],{"class":898},"bunx",[892,953,905],{"class":901},[892,955,909],{"class":908},[882,957,962],{"className":958,"code":959,"filename":960,"language":961,"meta":888,"style":888},"language-ts shiki shiki-themes light-plus light-plus dracula","import { getUserAgentLmdbList } from '@riavzon\u002Fshield-base';\n\n\u002F\u002F Compile into LMDB\nawait getUserAgentLmdbList('.\u002Fout');\n\n\u002F\u002F Or download the raw CSV without compiling\nimport { getUserAgentList } from '@riavzon\u002Fshield-base';\nawait getUserAgentList('.\u002Fout'); \u002F\u002F outputs useragent.csv\n","Programmatic","ts",[840,963,964,997,1003,1010,1032,1037,1043,1065],{"__ignoreMap":888},[892,965,966,970,974,978,981,984,988,991,994],{"class":894,"line":895},[892,967,969],{"class":968},"sZ328","import",[892,971,973],{"class":972},"sDd4n"," { ",[892,975,977],{"class":976},"sjsA6","getUserAgentLmdbList",[892,979,980],{"class":972}," } ",[892,982,983],{"class":968},"from",[892,985,987],{"class":986},"sFkSl"," '",[892,989,990],{"class":901},"@riavzon\u002Fshield-base",[892,992,993],{"class":986},"'",[892,995,996],{"class":972},";\n",[892,998,1000],{"class":894,"line":999},2,[892,1001,1002],{"emptyLinePlaceholder":8},"\n",[892,1004,1006],{"class":894,"line":1005},3,[892,1007,1009],{"class":1008},"sghk6","\u002F\u002F Compile into LMDB\n",[892,1011,1013,1016,1019,1022,1024,1027,1029],{"class":894,"line":1012},4,[892,1014,1015],{"class":968},"await",[892,1017,1018],{"class":898}," getUserAgentLmdbList",[892,1020,1021],{"class":972},"(",[892,1023,993],{"class":986},[892,1025,1026],{"class":901},".\u002Fout",[892,1028,993],{"class":986},[892,1030,1031],{"class":972},");\n",[892,1033,1035],{"class":894,"line":1034},5,[892,1036,1002],{"emptyLinePlaceholder":8},[892,1038,1040],{"class":894,"line":1039},6,[892,1041,1042],{"class":1008},"\u002F\u002F Or download the raw CSV without compiling\n",[892,1044,1046,1048,1050,1053,1055,1057,1059,1061,1063],{"class":894,"line":1045},7,[892,1047,969],{"class":968},[892,1049,973],{"class":972},[892,1051,1052],{"class":976},"getUserAgentList",[892,1054,980],{"class":972},[892,1056,983],{"class":968},[892,1058,987],{"class":986},[892,1060,990],{"class":901},[892,1062,993],{"class":986},[892,1064,996],{"class":972},[892,1066,1068,1070,1073,1075,1077,1079,1081,1084],{"class":894,"line":1067},8,[892,1069,1015],{"class":968},[892,1071,1072],{"class":898}," getUserAgentList",[892,1074,1021],{"class":972},[892,1076,993],{"class":986},[892,1078,1026],{"class":901},[892,1080,993],{"class":986},[892,1082,1083],{"class":972},"); ",[892,1085,1086],{"class":1008},"\u002F\u002F outputs useragent.csv\n",[844,1088],{},[847,1090,1092],{"id":1091},"record-structure","Record Structure",[882,1094,1096],{"className":958,"code":1095,"language":961,"meta":888,"style":888},"type Severity = 'none' | 'low' | 'medium' | 'high' | 'critical';\ntype Usage = 'Hunting' | 'Detection rule';\n\ninterface UserAgentRecord {\n  useragent_rx: string;                                  \u002F\u002F Regex pattern\n  metadata_description: string;\n  metadata_tool: string;\n  metadata_category: string;\n  metadata_link: string;\n  metadata_priority: Severity;\n  metadata_fp_risk: Severity;\n  metadata_severity: Severity;\n  metadata_usage: Usage;\n  metadata_flow_from_external: boolean | null;\n  metadata_flow_from_internal: boolean | null;\n  metadata_flow_to_internal: boolean | null;\n  metadata_flow_to_external: boolean | null;\n  metadata_for_successful_external_login_events: boolean | null;\n  metadata_comment: string;\n  date: string;\n  comment: string;\n}\n",[840,1097,1098,1158,1185,1189,1200,1217,1228,1239,1250,1262,1274,1286,1298,1310,1328,1344,1360,1376,1392,1404,1416,1428],{"__ignoreMap":888},[892,1099,1100,1104,1108,1112,1114,1117,1119,1122,1124,1127,1129,1131,1133,1136,1138,1140,1142,1145,1147,1149,1151,1154,1156],{"class":894,"line":895},[892,1101,1103],{"class":1102},"sl46w","type",[892,1105,1107],{"class":1106},"sFs1U"," Severity",[892,1109,1111],{"class":1110},"saOXh"," =",[892,1113,987],{"class":986},[892,1115,1116],{"class":901},"none",[892,1118,993],{"class":986},[892,1120,1121],{"class":1110}," |",[892,1123,987],{"class":986},[892,1125,1126],{"class":901},"low",[892,1128,993],{"class":986},[892,1130,1121],{"class":1110},[892,1132,987],{"class":986},[892,1134,1135],{"class":901},"medium",[892,1137,993],{"class":986},[892,1139,1121],{"class":1110},[892,1141,987],{"class":986},[892,1143,1144],{"class":901},"high",[892,1146,993],{"class":986},[892,1148,1121],{"class":1110},[892,1150,987],{"class":986},[892,1152,1153],{"class":901},"critical",[892,1155,993],{"class":986},[892,1157,996],{"class":972},[892,1159,1160,1162,1165,1167,1169,1172,1174,1176,1178,1181,1183],{"class":894,"line":999},[892,1161,1103],{"class":1102},[892,1163,1164],{"class":1106}," Usage",[892,1166,1111],{"class":1110},[892,1168,987],{"class":986},[892,1170,1171],{"class":901},"Hunting",[892,1173,993],{"class":986},[892,1175,1121],{"class":1110},[892,1177,987],{"class":986},[892,1179,1180],{"class":901},"Detection rule",[892,1182,993],{"class":986},[892,1184,996],{"class":972},[892,1186,1187],{"class":894,"line":1005},[892,1188,1002],{"emptyLinePlaceholder":8},[892,1190,1191,1194,1197],{"class":894,"line":1012},[892,1192,1193],{"class":1102},"interface",[892,1195,1196],{"class":1106}," UserAgentRecord",[892,1198,1199],{"class":972}," {\n",[892,1201,1202,1205,1208,1211,1214],{"class":894,"line":1034},[892,1203,1204],{"class":976},"  useragent_rx",[892,1206,1207],{"class":1110},":",[892,1209,1210],{"class":1106}," string",[892,1212,1213],{"class":972},";                                  ",[892,1215,1216],{"class":1008},"\u002F\u002F Regex pattern\n",[892,1218,1219,1222,1224,1226],{"class":894,"line":1039},[892,1220,1221],{"class":976},"  metadata_description",[892,1223,1207],{"class":1110},[892,1225,1210],{"class":1106},[892,1227,996],{"class":972},[892,1229,1230,1233,1235,1237],{"class":894,"line":1045},[892,1231,1232],{"class":976},"  metadata_tool",[892,1234,1207],{"class":1110},[892,1236,1210],{"class":1106},[892,1238,996],{"class":972},[892,1240,1241,1244,1246,1248],{"class":894,"line":1067},[892,1242,1243],{"class":976},"  metadata_category",[892,1245,1207],{"class":1110},[892,1247,1210],{"class":1106},[892,1249,996],{"class":972},[892,1251,1253,1256,1258,1260],{"class":894,"line":1252},9,[892,1254,1255],{"class":976},"  metadata_link",[892,1257,1207],{"class":1110},[892,1259,1210],{"class":1106},[892,1261,996],{"class":972},[892,1263,1265,1268,1270,1272],{"class":894,"line":1264},10,[892,1266,1267],{"class":976},"  metadata_priority",[892,1269,1207],{"class":1110},[892,1271,1107],{"class":1106},[892,1273,996],{"class":972},[892,1275,1277,1280,1282,1284],{"class":894,"line":1276},11,[892,1278,1279],{"class":976},"  metadata_fp_risk",[892,1281,1207],{"class":1110},[892,1283,1107],{"class":1106},[892,1285,996],{"class":972},[892,1287,1289,1292,1294,1296],{"class":894,"line":1288},12,[892,1290,1291],{"class":976},"  metadata_severity",[892,1293,1207],{"class":1110},[892,1295,1107],{"class":1106},[892,1297,996],{"class":972},[892,1299,1301,1304,1306,1308],{"class":894,"line":1300},13,[892,1302,1303],{"class":976},"  metadata_usage",[892,1305,1207],{"class":1110},[892,1307,1164],{"class":1106},[892,1309,996],{"class":972},[892,1311,1313,1316,1318,1321,1323,1326],{"class":894,"line":1312},14,[892,1314,1315],{"class":976},"  metadata_flow_from_external",[892,1317,1207],{"class":1110},[892,1319,1320],{"class":1106}," boolean",[892,1322,1121],{"class":1110},[892,1324,1325],{"class":1106}," null",[892,1327,996],{"class":972},[892,1329,1331,1334,1336,1338,1340,1342],{"class":894,"line":1330},15,[892,1332,1333],{"class":976},"  metadata_flow_from_internal",[892,1335,1207],{"class":1110},[892,1337,1320],{"class":1106},[892,1339,1121],{"class":1110},[892,1341,1325],{"class":1106},[892,1343,996],{"class":972},[892,1345,1347,1350,1352,1354,1356,1358],{"class":894,"line":1346},16,[892,1348,1349],{"class":976},"  metadata_flow_to_internal",[892,1351,1207],{"class":1110},[892,1353,1320],{"class":1106},[892,1355,1121],{"class":1110},[892,1357,1325],{"class":1106},[892,1359,996],{"class":972},[892,1361,1363,1366,1368,1370,1372,1374],{"class":894,"line":1362},17,[892,1364,1365],{"class":976},"  metadata_flow_to_external",[892,1367,1207],{"class":1110},[892,1369,1320],{"class":1106},[892,1371,1121],{"class":1110},[892,1373,1325],{"class":1106},[892,1375,996],{"class":972},[892,1377,1379,1382,1384,1386,1388,1390],{"class":894,"line":1378},18,[892,1380,1381],{"class":976},"  metadata_for_successful_external_login_events",[892,1383,1207],{"class":1110},[892,1385,1320],{"class":1106},[892,1387,1121],{"class":1110},[892,1389,1325],{"class":1106},[892,1391,996],{"class":972},[892,1393,1395,1398,1400,1402],{"class":894,"line":1394},19,[892,1396,1397],{"class":976},"  metadata_comment",[892,1399,1207],{"class":1110},[892,1401,1210],{"class":1106},[892,1403,996],{"class":972},[892,1405,1407,1410,1412,1414],{"class":894,"line":1406},20,[892,1408,1409],{"class":976},"  date",[892,1411,1207],{"class":1110},[892,1413,1210],{"class":1106},[892,1415,996],{"class":972},[892,1417,1419,1422,1424,1426],{"class":894,"line":1418},21,[892,1420,1421],{"class":976},"  comment",[892,1423,1207],{"class":1110},[892,1425,1210],{"class":1106},[892,1427,996],{"class":972},[892,1429,1431],{"class":894,"line":1430},22,[892,1432,1433],{"class":972},"}\n",[844,1435],{},[847,1437,1439],{"id":1438},"reading-the-database","Reading the Database",[821,1441,1442,1443,1446],{},"Use the ",[840,1444,1445],{},"lm-read"," subcommand to inspect records from the command line:",[879,1448,1449,1495,1530,1563,1596],{},[882,1450,1452],{"className":884,"code":1451,"filename":886,"language":887,"meta":888,"style":888},"pnpm dlx @riavzon\u002Fshield-base lm-read --path .\u002Fout\u002Fuseragent-db\u002Fuseragent.mdb --name useragent --operation get --key \"*DecoyLoader*\"\n",[840,1453,1454],{"__ignoreMap":888},[892,1455,1456,1458,1460,1462,1465,1468,1471,1474,1477,1480,1483,1486,1489,1492],{"class":894,"line":895},[892,1457,886],{"class":898},[892,1459,902],{"class":901},[892,1461,905],{"class":901},[892,1463,1464],{"class":901}," lm-read",[892,1466,1467],{"class":908}," --path",[892,1469,1470],{"class":901}," .\u002Fout\u002Fuseragent-db\u002Fuseragent.mdb",[892,1472,1473],{"class":908}," --name",[892,1475,1476],{"class":901}," useragent",[892,1478,1479],{"class":908}," --operation",[892,1481,1482],{"class":901}," get",[892,1484,1485],{"class":908}," --key",[892,1487,1488],{"class":986}," \"",[892,1490,1491],{"class":901},"*DecoyLoader*",[892,1493,1494],{"class":986},"\"\n",[882,1496,1498],{"className":884,"code":1497,"filename":913,"language":887,"meta":888,"style":888},"yarn dlx @riavzon\u002Fshield-base lm-read --path .\u002Fout\u002Fuseragent-db\u002Fuseragent.mdb --name useragent --operation get --key \"*DecoyLoader*\"\n",[840,1499,1500],{"__ignoreMap":888},[892,1501,1502,1504,1506,1508,1510,1512,1514,1516,1518,1520,1522,1524,1526,1528],{"class":894,"line":895},[892,1503,913],{"class":898},[892,1505,902],{"class":901},[892,1507,905],{"class":901},[892,1509,1464],{"class":901},[892,1511,1467],{"class":908},[892,1513,1470],{"class":901},[892,1515,1473],{"class":908},[892,1517,1476],{"class":901},[892,1519,1479],{"class":908},[892,1521,1482],{"class":901},[892,1523,1485],{"class":908},[892,1525,1488],{"class":986},[892,1527,1491],{"class":901},[892,1529,1494],{"class":986},[882,1531,1533],{"className":884,"code":1532,"filename":929,"language":887,"meta":888,"style":888},"npx @riavzon\u002Fshield-base lm-read --path .\u002Fout\u002Fuseragent-db\u002Fuseragent.mdb --name useragent --operation get --key \"*DecoyLoader*\"\n",[840,1534,1535],{"__ignoreMap":888},[892,1536,1537,1539,1541,1543,1545,1547,1549,1551,1553,1555,1557,1559,1561],{"class":894,"line":895},[892,1538,936],{"class":898},[892,1540,905],{"class":901},[892,1542,1464],{"class":901},[892,1544,1467],{"class":908},[892,1546,1470],{"class":901},[892,1548,1473],{"class":908},[892,1550,1476],{"class":901},[892,1552,1479],{"class":908},[892,1554,1482],{"class":901},[892,1556,1485],{"class":908},[892,1558,1488],{"class":986},[892,1560,1491],{"class":901},[892,1562,1494],{"class":986},[882,1564,1566],{"className":884,"code":1565,"filename":944,"language":887,"meta":888,"style":888},"bunx @riavzon\u002Fshield-base lm-read --path .\u002Fout\u002Fuseragent-db\u002Fuseragent.mdb --name useragent --operation get --key \"*DecoyLoader*\"\n",[840,1567,1568],{"__ignoreMap":888},[892,1569,1570,1572,1574,1576,1578,1580,1582,1584,1586,1588,1590,1592,1594],{"class":894,"line":895},[892,1571,951],{"class":898},[892,1573,905],{"class":901},[892,1575,1464],{"class":901},[892,1577,1467],{"class":908},[892,1579,1470],{"class":901},[892,1581,1473],{"class":908},[892,1583,1476],{"class":901},[892,1585,1479],{"class":908},[892,1587,1482],{"class":901},[892,1589,1485],{"class":908},[892,1591,1488],{"class":986},[892,1593,1491],{"class":901},[892,1595,1494],{"class":986},[882,1597,1599],{"className":958,"code":1598,"filename":960,"language":961,"meta":888,"style":888},"import { getByKey } from '@riavzon\u002Fshield-base';\nimport type { UserAgentRecord } from '@riavzon\u002Fshield-base';\n\nconst record = getByKey\u003CUserAgentRecord>(\n  '.\u002Fout\u002Fuseragent-db\u002Fuseragent.mdb',\n  'useragent',\n  '*DecoyLoader*'\n);\n",[840,1600,1601,1622,1646,1650,1673,1686,1697,1706],{"__ignoreMap":888},[892,1602,1603,1605,1607,1610,1612,1614,1616,1618,1620],{"class":894,"line":895},[892,1604,969],{"class":968},[892,1606,973],{"class":972},[892,1608,1609],{"class":976},"getByKey",[892,1611,980],{"class":972},[892,1613,983],{"class":968},[892,1615,987],{"class":986},[892,1617,990],{"class":901},[892,1619,993],{"class":986},[892,1621,996],{"class":972},[892,1623,1624,1626,1629,1631,1634,1636,1638,1640,1642,1644],{"class":894,"line":999},[892,1625,969],{"class":968},[892,1627,1628],{"class":968}," type",[892,1630,973],{"class":972},[892,1632,1633],{"class":976},"UserAgentRecord",[892,1635,980],{"class":972},[892,1637,983],{"class":968},[892,1639,987],{"class":986},[892,1641,990],{"class":901},[892,1643,993],{"class":986},[892,1645,996],{"class":972},[892,1647,1648],{"class":894,"line":1005},[892,1649,1002],{"emptyLinePlaceholder":8},[892,1651,1652,1655,1659,1661,1664,1667,1670],{"class":894,"line":1012},[892,1653,1654],{"class":1102},"const",[892,1656,1658],{"class":1657},"s3JHE"," record",[892,1660,1111],{"class":1110},[892,1662,1663],{"class":898}," getByKey",[892,1665,1666],{"class":972},"\u003C",[892,1668,1633],{"class":1669},"sW-rI",[892,1671,1672],{"class":972},">(\n",[892,1674,1675,1678,1681,1683],{"class":894,"line":1034},[892,1676,1677],{"class":986},"  '",[892,1679,1680],{"class":901},".\u002Fout\u002Fuseragent-db\u002Fuseragent.mdb",[892,1682,993],{"class":986},[892,1684,1685],{"class":972},",\n",[892,1687,1688,1690,1693,1695],{"class":894,"line":1039},[892,1689,1677],{"class":986},[892,1691,1692],{"class":901},"useragent",[892,1694,993],{"class":986},[892,1696,1685],{"class":972},[892,1698,1699,1701,1703],{"class":894,"line":1045},[892,1700,1677],{"class":986},[892,1702,1491],{"class":901},[892,1704,1705],{"class":986},"'\n",[892,1707,1708],{"class":894,"line":1067},[892,1709,1031],{"class":972},[882,1711,1714],{"className":1712,"code":1713,"language":5,"meta":888,"style":888},"language-json shiki shiki-themes light-plus light-plus dracula","{\n  \"useragent_rx\": \"(?:).*DecoyLoader.*(?:)\",\n  \"metadata_description\": \"malware sample communicating over HTTP with a hard-coded C2 server and this using string in the user-agent\",\n  \"metadata_tool\": \"DecoyLoader\",\n  \"metadata_category\": \"Malware\",\n  \"metadata_link\": \"\",\n  \"metadata_priority\": \"high\",\n  \"metadata_fp_risk\": \"none\",\n  \"metadata_severity\": \"high\",\n  \"metadata_usage\": \"Detection rule\",\n  \"metadata_flow_from_external\": null,\n  \"metadata_flow_from_internal\": null,\n  \"metadata_flow_to_internal\": null,\n  \"metadata_flow_to_external\": null,\n  \"metadata_for_successful_external_login_events\": null,\n  \"metadata_comment\": \"\",\n  \"date\": \"2026-03-24T23:23:16.470Z\",\n  \"comment\": \"Data maintained by https:\u002F\u002Fgithub.com\u002Fmthcht\u002Fawesome-lists, transformed by Shield-base\"\n}\n",[840,1715,1716,1721,1745,1765,1785,1805,1821,1840,1859,1878,1897,1912,1927,1942,1957,1972,1987,2007,2025],{"__ignoreMap":888},[892,1717,1718],{"class":894,"line":895},[892,1719,1720],{"class":972},"{\n",[892,1722,1723,1727,1731,1734,1736,1738,1741,1743],{"class":894,"line":999},[892,1724,1726],{"class":1725},"saJyd","  \"",[892,1728,1730],{"class":1729},"s_W10","useragent_rx",[892,1732,1733],{"class":1725},"\"",[892,1735,1207],{"class":1110},[892,1737,1488],{"class":986},[892,1739,1740],{"class":901},"(?:).*DecoyLoader.*(?:)",[892,1742,1733],{"class":986},[892,1744,1685],{"class":972},[892,1746,1747,1749,1752,1754,1756,1758,1761,1763],{"class":894,"line":1005},[892,1748,1726],{"class":1725},[892,1750,1751],{"class":1729},"metadata_description",[892,1753,1733],{"class":1725},[892,1755,1207],{"class":1110},[892,1757,1488],{"class":986},[892,1759,1760],{"class":901},"malware sample communicating over HTTP with a hard-coded C2 server and this using string in the user-agent",[892,1762,1733],{"class":986},[892,1764,1685],{"class":972},[892,1766,1767,1769,1772,1774,1776,1778,1781,1783],{"class":894,"line":1012},[892,1768,1726],{"class":1725},[892,1770,1771],{"class":1729},"metadata_tool",[892,1773,1733],{"class":1725},[892,1775,1207],{"class":1110},[892,1777,1488],{"class":986},[892,1779,1780],{"class":901},"DecoyLoader",[892,1782,1733],{"class":986},[892,1784,1685],{"class":972},[892,1786,1787,1789,1792,1794,1796,1798,1801,1803],{"class":894,"line":1034},[892,1788,1726],{"class":1725},[892,1790,1791],{"class":1729},"metadata_category",[892,1793,1733],{"class":1725},[892,1795,1207],{"class":1110},[892,1797,1488],{"class":986},[892,1799,1800],{"class":901},"Malware",[892,1802,1733],{"class":986},[892,1804,1685],{"class":972},[892,1806,1807,1809,1812,1814,1816,1819],{"class":894,"line":1039},[892,1808,1726],{"class":1725},[892,1810,1811],{"class":1729},"metadata_link",[892,1813,1733],{"class":1725},[892,1815,1207],{"class":1110},[892,1817,1818],{"class":986}," \"\"",[892,1820,1685],{"class":972},[892,1822,1823,1825,1828,1830,1832,1834,1836,1838],{"class":894,"line":1045},[892,1824,1726],{"class":1725},[892,1826,1827],{"class":1729},"metadata_priority",[892,1829,1733],{"class":1725},[892,1831,1207],{"class":1110},[892,1833,1488],{"class":986},[892,1835,1144],{"class":901},[892,1837,1733],{"class":986},[892,1839,1685],{"class":972},[892,1841,1842,1844,1847,1849,1851,1853,1855,1857],{"class":894,"line":1067},[892,1843,1726],{"class":1725},[892,1845,1846],{"class":1729},"metadata_fp_risk",[892,1848,1733],{"class":1725},[892,1850,1207],{"class":1110},[892,1852,1488],{"class":986},[892,1854,1116],{"class":901},[892,1856,1733],{"class":986},[892,1858,1685],{"class":972},[892,1860,1861,1863,1866,1868,1870,1872,1874,1876],{"class":894,"line":1252},[892,1862,1726],{"class":1725},[892,1864,1865],{"class":1729},"metadata_severity",[892,1867,1733],{"class":1725},[892,1869,1207],{"class":1110},[892,1871,1488],{"class":986},[892,1873,1144],{"class":901},[892,1875,1733],{"class":986},[892,1877,1685],{"class":972},[892,1879,1880,1882,1885,1887,1889,1891,1893,1895],{"class":894,"line":1264},[892,1881,1726],{"class":1725},[892,1883,1884],{"class":1729},"metadata_usage",[892,1886,1733],{"class":1725},[892,1888,1207],{"class":1110},[892,1890,1488],{"class":986},[892,1892,1180],{"class":901},[892,1894,1733],{"class":986},[892,1896,1685],{"class":972},[892,1898,1899,1901,1904,1906,1908,1910],{"class":894,"line":1276},[892,1900,1726],{"class":1725},[892,1902,1903],{"class":1729},"metadata_flow_from_external",[892,1905,1733],{"class":1725},[892,1907,1207],{"class":1110},[892,1909,1325],{"class":908},[892,1911,1685],{"class":972},[892,1913,1914,1916,1919,1921,1923,1925],{"class":894,"line":1288},[892,1915,1726],{"class":1725},[892,1917,1918],{"class":1729},"metadata_flow_from_internal",[892,1920,1733],{"class":1725},[892,1922,1207],{"class":1110},[892,1924,1325],{"class":908},[892,1926,1685],{"class":972},[892,1928,1929,1931,1934,1936,1938,1940],{"class":894,"line":1300},[892,1930,1726],{"class":1725},[892,1932,1933],{"class":1729},"metadata_flow_to_internal",[892,1935,1733],{"class":1725},[892,1937,1207],{"class":1110},[892,1939,1325],{"class":908},[892,1941,1685],{"class":972},[892,1943,1944,1946,1949,1951,1953,1955],{"class":894,"line":1312},[892,1945,1726],{"class":1725},[892,1947,1948],{"class":1729},"metadata_flow_to_external",[892,1950,1733],{"class":1725},[892,1952,1207],{"class":1110},[892,1954,1325],{"class":908},[892,1956,1685],{"class":972},[892,1958,1959,1961,1964,1966,1968,1970],{"class":894,"line":1330},[892,1960,1726],{"class":1725},[892,1962,1963],{"class":1729},"metadata_for_successful_external_login_events",[892,1965,1733],{"class":1725},[892,1967,1207],{"class":1110},[892,1969,1325],{"class":908},[892,1971,1685],{"class":972},[892,1973,1974,1976,1979,1981,1983,1985],{"class":894,"line":1346},[892,1975,1726],{"class":1725},[892,1977,1978],{"class":1729},"metadata_comment",[892,1980,1733],{"class":1725},[892,1982,1207],{"class":1110},[892,1984,1818],{"class":986},[892,1986,1685],{"class":972},[892,1988,1989,1991,1994,1996,1998,2000,2003,2005],{"class":894,"line":1362},[892,1990,1726],{"class":1725},[892,1992,1993],{"class":1729},"date",[892,1995,1733],{"class":1725},[892,1997,1207],{"class":1110},[892,1999,1488],{"class":986},[892,2001,2002],{"class":901},"2026-03-24T23:23:16.470Z",[892,2004,1733],{"class":986},[892,2006,1685],{"class":972},[892,2008,2009,2011,2014,2016,2018,2020,2023],{"class":894,"line":1378},[892,2010,1726],{"class":1725},[892,2012,2013],{"class":1729},"comment",[892,2015,1733],{"class":1725},[892,2017,1207],{"class":1110},[892,2019,1488],{"class":986},[892,2021,2022],{"class":901},"Data maintained by https:\u002F\u002Fgithub.com\u002Fmthcht\u002Fawesome-lists, transformed by Shield-base",[892,2024,1494],{"class":986},[892,2026,2027],{"class":894,"line":1394},[892,2028,1433],{"class":972},[2030,2031,2032],"tip",{},[821,2033,2034,2035,2037],{},"The ",[825,2036,393],{"href":394}," checker in Bot Detector reads this database to match incoming request user-agent strings against known malicious patterns.",[2039,2040,2041],"style",{},"html pre.shiki code .sHOzp, html code.shiki .sHOzp{--shiki-light:#795E26;--shiki-default:#795E26;--shiki-dark:#50FA7B}html pre.shiki code .sFB1V, html code.shiki .sFB1V{--shiki-light:#A31515;--shiki-default:#A31515;--shiki-dark:#F1FA8C}html pre.shiki code .sjR7W, html code.shiki .sjR7W{--shiki-light:#0000FF;--shiki-default:#0000FF;--shiki-dark:#BD93F9}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZ328, html code.shiki .sZ328{--shiki-light:#AF00DB;--shiki-default:#AF00DB;--shiki-dark:#FF79C6}html pre.shiki code .sDd4n, html code.shiki .sDd4n{--shiki-light:#000000;--shiki-default:#000000;--shiki-dark:#F8F8F2}html pre.shiki code .sjsA6, html code.shiki .sjsA6{--shiki-light:#001080;--shiki-default:#001080;--shiki-dark:#F8F8F2}html pre.shiki code .sFkSl, html code.shiki .sFkSl{--shiki-light:#A31515;--shiki-default:#A31515;--shiki-dark:#E9F284}html pre.shiki code .sghk6, html code.shiki .sghk6{--shiki-light:#008000;--shiki-default:#008000;--shiki-dark:#6272A4}html pre.shiki code .sl46w, html code.shiki .sl46w{--shiki-light:#0000FF;--shiki-default:#0000FF;--shiki-dark:#FF79C6}html pre.shiki code .sFs1U, html code.shiki .sFs1U{--shiki-light:#267F99;--shiki-light-font-style:inherit;--shiki-default:#267F99;--shiki-default-font-style:inherit;--shiki-dark:#8BE9FD;--shiki-dark-font-style:italic}html pre.shiki code .saOXh, html code.shiki .saOXh{--shiki-light:#000000;--shiki-default:#000000;--shiki-dark:#FF79C6}html pre.shiki code .s3JHE, html code.shiki .s3JHE{--shiki-light:#0070C1;--shiki-default:#0070C1;--shiki-dark:#F8F8F2}html pre.shiki code .sW-rI, html code.shiki .sW-rI{--shiki-light:#267F99;--shiki-light-font-style:inherit;--shiki-default:#267F99;--shiki-default-font-style:inherit;--shiki-dark:#FFB86C;--shiki-dark-font-style:italic}html pre.shiki code .saJyd, html code.shiki .saJyd{--shiki-light:#0451A5;--shiki-default:#0451A5;--shiki-dark:#8BE9FE}html pre.shiki code .s_W10, html code.shiki .s_W10{--shiki-light:#0451A5;--shiki-default:#0451A5;--shiki-dark:#8BE9FD}",{"title":888,"searchDepth":999,"depth":999,"links":2043},[2044,2045,2046,2047],{"id":849,"depth":999,"text":850},{"id":876,"depth":999,"text":877},{"id":1091,"depth":999,"text":1092},{"id":1438,"depth":999,"text":1439},"Curated list of malicious and suspicious HTTP User-Agent strings compiled into an LMDB database keyed by pattern name.","md","i-lucide-scan-search",{},null,"---\ntitle: Suspicious User-Agents\ndescription: Curated list of malicious and suspicious HTTP User-Agent strings compiled into an LMDB database keyed by pattern name.\nicon: i-lucide-scan-search\n---\n\nThis source downloads a curated CSV list of suspicious and malicious HTTP User-Agent strings from [mthcht\u002Fawesome-lists](https:\u002F\u002Fgithub.com\u002Fmthcht\u002Fawesome-lists\u002Ftree\u002Fmain\u002FLists). Use it to detect and block known bad clients at the request level. Each record includes regex patterns, severity ratings, tool metadata, and flow direction flags.\n\n**Output file:** `useragent-db\u002Fuseragent.mdb`\n\n---\n\n## Data Source\n\n- Suspicious user-agents CSV: [mthcht\u002Fawesome-lists](https:\u002F\u002Fraw.githubusercontent.com\u002Fmthcht\u002Fawesome-lists\u002Frefs\u002Fheads\u002Fmain\u002FLists\u002Fsuspicious_http_user_agents_list.csv)\n\n::note\nA `useragent.mdb-lock` file is generated automatically alongside the database. This file is required for concurrent access.\n::\n\n---\n\n## Usage\n\n::code-group\n```bash [pnpm]\npnpm dlx @riavzon\u002Fshield-base --useragent\n```\n\n```bash [yarn]\nyarn dlx @riavzon\u002Fshield-base --useragent\n```\n\n```bash [npm]\nnpx @riavzon\u002Fshield-base --useragent\n```\n\n```bash [bun]\nbunx @riavzon\u002Fshield-base --useragent\n```\n```ts [Programmatic]\nimport { getUserAgentLmdbList } from '@riavzon\u002Fshield-base';\n\n\u002F\u002F Compile into LMDB\nawait getUserAgentLmdbList('.\u002Fout');\n\n\u002F\u002F Or download the raw CSV without compiling\nimport { getUserAgentList } from '@riavzon\u002Fshield-base';\nawait getUserAgentList('.\u002Fout'); \u002F\u002F outputs useragent.csv\n```\n::\n\n---\n\n## Record Structure\n\n```ts\ntype Severity = 'none' | 'low' | 'medium' | 'high' | 'critical';\ntype Usage = 'Hunting' | 'Detection rule';\n\ninterface UserAgentRecord {\n  useragent_rx: string;                                  \u002F\u002F Regex pattern\n  metadata_description: string;\n  metadata_tool: string;\n  metadata_category: string;\n  metadata_link: string;\n  metadata_priority: Severity;\n  metadata_fp_risk: Severity;\n  metadata_severity: Severity;\n  metadata_usage: Usage;\n  metadata_flow_from_external: boolean | null;\n  metadata_flow_from_internal: boolean | null;\n  metadata_flow_to_internal: boolean | null;\n  metadata_flow_to_external: boolean | null;\n  metadata_for_successful_external_login_events: boolean | null;\n  metadata_comment: string;\n  date: string;\n  comment: string;\n}\n```\n\n---\n\n## Reading the Database\n\nUse the `lm-read` subcommand to inspect records from the command line:\n\n::code-group\n```bash [pnpm]\npnpm dlx @riavzon\u002Fshield-base lm-read --path .\u002Fout\u002Fuseragent-db\u002Fuseragent.mdb --name useragent --operation get --key \"*DecoyLoader*\"\n```\n\n```bash [yarn]\nyarn dlx @riavzon\u002Fshield-base lm-read --path .\u002Fout\u002Fuseragent-db\u002Fuseragent.mdb --name useragent --operation get --key \"*DecoyLoader*\"\n```\n\n```bash [npm]\nnpx @riavzon\u002Fshield-base lm-read --path .\u002Fout\u002Fuseragent-db\u002Fuseragent.mdb --name useragent --operation get --key \"*DecoyLoader*\"\n```\n\n```bash [bun]\nbunx @riavzon\u002Fshield-base lm-read --path .\u002Fout\u002Fuseragent-db\u002Fuseragent.mdb --name useragent --operation get --key \"*DecoyLoader*\"\n```\n```ts [Programmatic]\nimport { getByKey } from '@riavzon\u002Fshield-base';\nimport type { UserAgentRecord } from '@riavzon\u002Fshield-base';\n\nconst record = getByKey\u003CUserAgentRecord>(\n  '.\u002Fout\u002Fuseragent-db\u002Fuseragent.mdb',\n  'useragent',\n  '*DecoyLoader*'\n);\n```\n::\n\n```json\n{\n  \"useragent_rx\": \"(?:).*DecoyLoader.*(?:)\",\n  \"metadata_description\": \"malware sample communicating over HTTP with a hard-coded C2 server and this using string in the user-agent\",\n  \"metadata_tool\": \"DecoyLoader\",\n  \"metadata_category\": \"Malware\",\n  \"metadata_link\": \"\",\n  \"metadata_priority\": \"high\",\n  \"metadata_fp_risk\": \"none\",\n  \"metadata_severity\": \"high\",\n  \"metadata_usage\": \"Detection rule\",\n  \"metadata_flow_from_external\": null,\n  \"metadata_flow_from_internal\": null,\n  \"metadata_flow_to_internal\": null,\n  \"metadata_flow_to_external\": null,\n  \"metadata_for_successful_external_login_events\": null,\n  \"metadata_comment\": \"\",\n  \"date\": \"2026-03-24T23:23:16.470Z\",\n  \"comment\": \"Data maintained by https:\u002F\u002Fgithub.com\u002Fmthcht\u002Fawesome-lists, transformed by Shield-base\"\n}\n```\n\n::tip\nThe [Known Bad User-Agents](\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fknown-bad-ua) checker in Bot Detector reads this database to match incoming request user-agent strings against known malicious patterns.\n::\n",{"title":119,"description":2048},"PG8p6JfLffuTR-w4_Nl5FPXKidlJ6SRaQAoV6X--DWw",[2057,2058],{"title":115,"path":116,"stem":117,"children":-1},{"title":123,"path":124,"stem":125,"children":-1},{"id":816,"title":119,"body":2060,"description":2048,"extension":2049,"icon":2050,"meta":3072,"module":2052,"navigation":8,"path":120,"rawbody":2053,"seo":3073,"stem":121,"__hash__":2055},{"type":818,"value":2061,"toc":3066},[2062,2067,2073,2075,2077,2084,2090,2092,2094,2242,2244,2246,2530,2532,2534,2538,2770,3058,3064],[821,2063,823,2064,831],{},[825,2065,830],{"href":827,"rel":2066},[829],[821,2068,2069,838,2071],{},[835,2070,837],{},[840,2072,842],{},[844,2074],{},[847,2076,850],{"id":849},[852,2078,2079],{},[855,2080,857,2081],{},[825,2082,830],{"href":860,"rel":2083},[829],[863,2085,2086],{},[821,2087,867,2088,871],{},[840,2089,870],{},[844,2091],{},[847,2093,877],{"id":876},[879,2095,2096,2110,2124,2136,2148],{},[882,2097,2098],{"className":884,"code":885,"filename":886,"language":887,"meta":888,"style":888},[840,2099,2100],{"__ignoreMap":888},[892,2101,2102,2104,2106,2108],{"class":894,"line":895},[892,2103,886],{"class":898},[892,2105,902],{"class":901},[892,2107,905],{"class":901},[892,2109,909],{"class":908},[882,2111,2112],{"className":884,"code":912,"filename":913,"language":887,"meta":888,"style":888},[840,2113,2114],{"__ignoreMap":888},[892,2115,2116,2118,2120,2122],{"class":894,"line":895},[892,2117,913],{"class":898},[892,2119,902],{"class":901},[892,2121,905],{"class":901},[892,2123,909],{"class":908},[882,2125,2126],{"className":884,"code":928,"filename":929,"language":887,"meta":888,"style":888},[840,2127,2128],{"__ignoreMap":888},[892,2129,2130,2132,2134],{"class":894,"line":895},[892,2131,936],{"class":898},[892,2133,905],{"class":901},[892,2135,909],{"class":908},[882,2137,2138],{"className":884,"code":943,"filename":944,"language":887,"meta":888,"style":888},[840,2139,2140],{"__ignoreMap":888},[892,2141,2142,2144,2146],{"class":894,"line":895},[892,2143,951],{"class":898},[892,2145,905],{"class":901},[892,2147,909],{"class":908},[882,2149,2150],{"className":958,"code":959,"filename":960,"language":961,"meta":888,"style":888},[840,2151,2152,2172,2176,2180,2196,2200,2204,2224],{"__ignoreMap":888},[892,2153,2154,2156,2158,2160,2162,2164,2166,2168,2170],{"class":894,"line":895},[892,2155,969],{"class":968},[892,2157,973],{"class":972},[892,2159,977],{"class":976},[892,2161,980],{"class":972},[892,2163,983],{"class":968},[892,2165,987],{"class":986},[892,2167,990],{"class":901},[892,2169,993],{"class":986},[892,2171,996],{"class":972},[892,2173,2174],{"class":894,"line":999},[892,2175,1002],{"emptyLinePlaceholder":8},[892,2177,2178],{"class":894,"line":1005},[892,2179,1009],{"class":1008},[892,2181,2182,2184,2186,2188,2190,2192,2194],{"class":894,"line":1012},[892,2183,1015],{"class":968},[892,2185,1018],{"class":898},[892,2187,1021],{"class":972},[892,2189,993],{"class":986},[892,2191,1026],{"class":901},[892,2193,993],{"class":986},[892,2195,1031],{"class":972},[892,2197,2198],{"class":894,"line":1034},[892,2199,1002],{"emptyLinePlaceholder":8},[892,2201,2202],{"class":894,"line":1039},[892,2203,1042],{"class":1008},[892,2205,2206,2208,2210,2212,2214,2216,2218,2220,2222],{"class":894,"line":1045},[892,2207,969],{"class":968},[892,2209,973],{"class":972},[892,2211,1052],{"class":976},[892,2213,980],{"class":972},[892,2215,983],{"class":968},[892,2217,987],{"class":986},[892,2219,990],{"class":901},[892,2221,993],{"class":986},[892,2223,996],{"class":972},[892,2225,2226,2228,2230,2232,2234,2236,2238,2240],{"class":894,"line":1067},[892,2227,1015],{"class":968},[892,2229,1072],{"class":898},[892,2231,1021],{"class":972},[892,2233,993],{"class":986},[892,2235,1026],{"class":901},[892,2237,993],{"class":986},[892,2239,1083],{"class":972},[892,2241,1086],{"class":1008},[844,2243],{},[847,2245,1092],{"id":1091},[882,2247,2248],{"className":958,"code":1095,"language":961,"meta":888,"style":888},[840,2249,2250,2298,2322,2326,2334,2346,2356,2366,2376,2386,2396,2406,2416,2426,2440,2454,2468,2482,2496,2506,2516,2526],{"__ignoreMap":888},[892,2251,2252,2254,2256,2258,2260,2262,2264,2266,2268,2270,2272,2274,2276,2278,2280,2282,2284,2286,2288,2290,2292,2294,2296],{"class":894,"line":895},[892,2253,1103],{"class":1102},[892,2255,1107],{"class":1106},[892,2257,1111],{"class":1110},[892,2259,987],{"class":986},[892,2261,1116],{"class":901},[892,2263,993],{"class":986},[892,2265,1121],{"class":1110},[892,2267,987],{"class":986},[892,2269,1126],{"class":901},[892,2271,993],{"class":986},[892,2273,1121],{"class":1110},[892,2275,987],{"class":986},[892,2277,1135],{"class":901},[892,2279,993],{"class":986},[892,2281,1121],{"class":1110},[892,2283,987],{"class":986},[892,2285,1144],{"class":901},[892,2287,993],{"class":986},[892,2289,1121],{"class":1110},[892,2291,987],{"class":986},[892,2293,1153],{"class":901},[892,2295,993],{"class":986},[892,2297,996],{"class":972},[892,2299,2300,2302,2304,2306,2308,2310,2312,2314,2316,2318,2320],{"class":894,"line":999},[892,2301,1103],{"class":1102},[892,2303,1164],{"class":1106},[892,2305,1111],{"class":1110},[892,2307,987],{"class":986},[892,2309,1171],{"class":901},[892,2311,993],{"class":986},[892,2313,1121],{"class":1110},[892,2315,987],{"class":986},[892,2317,1180],{"class":901},[892,2319,993],{"class":986},[892,2321,996],{"class":972},[892,2323,2324],{"class":894,"line":1005},[892,2325,1002],{"emptyLinePlaceholder":8},[892,2327,2328,2330,2332],{"class":894,"line":1012},[892,2329,1193],{"class":1102},[892,2331,1196],{"class":1106},[892,2333,1199],{"class":972},[892,2335,2336,2338,2340,2342,2344],{"class":894,"line":1034},[892,2337,1204],{"class":976},[892,2339,1207],{"class":1110},[892,2341,1210],{"class":1106},[892,2343,1213],{"class":972},[892,2345,1216],{"class":1008},[892,2347,2348,2350,2352,2354],{"class":894,"line":1039},[892,2349,1221],{"class":976},[892,2351,1207],{"class":1110},[892,2353,1210],{"class":1106},[892,2355,996],{"class":972},[892,2357,2358,2360,2362,2364],{"class":894,"line":1045},[892,2359,1232],{"class":976},[892,2361,1207],{"class":1110},[892,2363,1210],{"class":1106},[892,2365,996],{"class":972},[892,2367,2368,2370,2372,2374],{"class":894,"line":1067},[892,2369,1243],{"class":976},[892,2371,1207],{"class":1110},[892,2373,1210],{"class":1106},[892,2375,996],{"class":972},[892,2377,2378,2380,2382,2384],{"class":894,"line":1252},[892,2379,1255],{"class":976},[892,2381,1207],{"class":1110},[892,2383,1210],{"class":1106},[892,2385,996],{"class":972},[892,2387,2388,2390,2392,2394],{"class":894,"line":1264},[892,2389,1267],{"class":976},[892,2391,1207],{"class":1110},[892,2393,1107],{"class":1106},[892,2395,996],{"class":972},[892,2397,2398,2400,2402,2404],{"class":894,"line":1276},[892,2399,1279],{"class":976},[892,2401,1207],{"class":1110},[892,2403,1107],{"class":1106},[892,2405,996],{"class":972},[892,2407,2408,2410,2412,2414],{"class":894,"line":1288},[892,2409,1291],{"class":976},[892,2411,1207],{"class":1110},[892,2413,1107],{"class":1106},[892,2415,996],{"class":972},[892,2417,2418,2420,2422,2424],{"class":894,"line":1300},[892,2419,1303],{"class":976},[892,2421,1207],{"class":1110},[892,2423,1164],{"class":1106},[892,2425,996],{"class":972},[892,2427,2428,2430,2432,2434,2436,2438],{"class":894,"line":1312},[892,2429,1315],{"class":976},[892,2431,1207],{"class":1110},[892,2433,1320],{"class":1106},[892,2435,1121],{"class":1110},[892,2437,1325],{"class":1106},[892,2439,996],{"class":972},[892,2441,2442,2444,2446,2448,2450,2452],{"class":894,"line":1330},[892,2443,1333],{"class":976},[892,2445,1207],{"class":1110},[892,2447,1320],{"class":1106},[892,2449,1121],{"class":1110},[892,2451,1325],{"class":1106},[892,2453,996],{"class":972},[892,2455,2456,2458,2460,2462,2464,2466],{"class":894,"line":1346},[892,2457,1349],{"class":976},[892,2459,1207],{"class":1110},[892,2461,1320],{"class":1106},[892,2463,1121],{"class":1110},[892,2465,1325],{"class":1106},[892,2467,996],{"class":972},[892,2469,2470,2472,2474,2476,2478,2480],{"class":894,"line":1362},[892,2471,1365],{"class":976},[892,2473,1207],{"class":1110},[892,2475,1320],{"class":1106},[892,2477,1121],{"class":1110},[892,2479,1325],{"class":1106},[892,2481,996],{"class":972},[892,2483,2484,2486,2488,2490,2492,2494],{"class":894,"line":1378},[892,2485,1381],{"class":976},[892,2487,1207],{"class":1110},[892,2489,1320],{"class":1106},[892,2491,1121],{"class":1110},[892,2493,1325],{"class":1106},[892,2495,996],{"class":972},[892,2497,2498,2500,2502,2504],{"class":894,"line":1394},[892,2499,1397],{"class":976},[892,2501,1207],{"class":1110},[892,2503,1210],{"class":1106},[892,2505,996],{"class":972},[892,2507,2508,2510,2512,2514],{"class":894,"line":1406},[892,2509,1409],{"class":976},[892,2511,1207],{"class":1110},[892,2513,1210],{"class":1106},[892,2515,996],{"class":972},[892,2517,2518,2520,2522,2524],{"class":894,"line":1418},[892,2519,1421],{"class":976},[892,2521,1207],{"class":1110},[892,2523,1210],{"class":1106},[892,2525,996],{"class":972},[892,2527,2528],{"class":894,"line":1430},[892,2529,1433],{"class":972},[844,2531],{},[847,2533,1439],{"id":1438},[821,2535,1442,2536,1446],{},[840,2537,1445],{},[879,2539,2540,2574,2608,2640,2672],{},[882,2541,2542],{"className":884,"code":1451,"filename":886,"language":887,"meta":888,"style":888},[840,2543,2544],{"__ignoreMap":888},[892,2545,2546,2548,2550,2552,2554,2556,2558,2560,2562,2564,2566,2568,2570,2572],{"class":894,"line":895},[892,2547,886],{"class":898},[892,2549,902],{"class":901},[892,2551,905],{"class":901},[892,2553,1464],{"class":901},[892,2555,1467],{"class":908},[892,2557,1470],{"class":901},[892,2559,1473],{"class":908},[892,2561,1476],{"class":901},[892,2563,1479],{"class":908},[892,2565,1482],{"class":901},[892,2567,1485],{"class":908},[892,2569,1488],{"class":986},[892,2571,1491],{"class":901},[892,2573,1494],{"class":986},[882,2575,2576],{"className":884,"code":1497,"filename":913,"language":887,"meta":888,"style":888},[840,2577,2578],{"__ignoreMap":888},[892,2579,2580,2582,2584,2586,2588,2590,2592,2594,2596,2598,2600,2602,2604,2606],{"class":894,"line":895},[892,2581,913],{"class":898},[892,2583,902],{"class":901},[892,2585,905],{"class":901},[892,2587,1464],{"class":901},[892,2589,1467],{"class":908},[892,2591,1470],{"class":901},[892,2593,1473],{"class":908},[892,2595,1476],{"class":901},[892,2597,1479],{"class":908},[892,2599,1482],{"class":901},[892,2601,1485],{"class":908},[892,2603,1488],{"class":986},[892,2605,1491],{"class":901},[892,2607,1494],{"class":986},[882,2609,2610],{"className":884,"code":1532,"filename":929,"language":887,"meta":888,"style":888},[840,2611,2612],{"__ignoreMap":888},[892,2613,2614,2616,2618,2620,2622,2624,2626,2628,2630,2632,2634,2636,2638],{"class":894,"line":895},[892,2615,936],{"class":898},[892,2617,905],{"class":901},[892,2619,1464],{"class":901},[892,2621,1467],{"class":908},[892,2623,1470],{"class":901},[892,2625,1473],{"class":908},[892,2627,1476],{"class":901},[892,2629,1479],{"class":908},[892,2631,1482],{"class":901},[892,2633,1485],{"class":908},[892,2635,1488],{"class":986},[892,2637,1491],{"class":901},[892,2639,1494],{"class":986},[882,2641,2642],{"className":884,"code":1565,"filename":944,"language":887,"meta":888,"style":888},[840,2643,2644],{"__ignoreMap":888},[892,2645,2646,2648,2650,2652,2654,2656,2658,2660,2662,2664,2666,2668,2670],{"class":894,"line":895},[892,2647,951],{"class":898},[892,2649,905],{"class":901},[892,2651,1464],{"class":901},[892,2653,1467],{"class":908},[892,2655,1470],{"class":901},[892,2657,1473],{"class":908},[892,2659,1476],{"class":901},[892,2661,1479],{"class":908},[892,2663,1482],{"class":901},[892,2665,1485],{"class":908},[892,2667,1488],{"class":986},[892,2669,1491],{"class":901},[892,2671,1494],{"class":986},[882,2673,2674],{"className":958,"code":1598,"filename":960,"language":961,"meta":888,"style":888},[840,2675,2676,2696,2718,2722,2738,2748,2758,2766],{"__ignoreMap":888},[892,2677,2678,2680,2682,2684,2686,2688,2690,2692,2694],{"class":894,"line":895},[892,2679,969],{"class":968},[892,2681,973],{"class":972},[892,2683,1609],{"class":976},[892,2685,980],{"class":972},[892,2687,983],{"class":968},[892,2689,987],{"class":986},[892,2691,990],{"class":901},[892,2693,993],{"class":986},[892,2695,996],{"class":972},[892,2697,2698,2700,2702,2704,2706,2708,2710,2712,2714,2716],{"class":894,"line":999},[892,2699,969],{"class":968},[892,2701,1628],{"class":968},[892,2703,973],{"class":972},[892,2705,1633],{"class":976},[892,2707,980],{"class":972},[892,2709,983],{"class":968},[892,2711,987],{"class":986},[892,2713,990],{"class":901},[892,2715,993],{"class":986},[892,2717,996],{"class":972},[892,2719,2720],{"class":894,"line":1005},[892,2721,1002],{"emptyLinePlaceholder":8},[892,2723,2724,2726,2728,2730,2732,2734,2736],{"class":894,"line":1012},[892,2725,1654],{"class":1102},[892,2727,1658],{"class":1657},[892,2729,1111],{"class":1110},[892,2731,1663],{"class":898},[892,2733,1666],{"class":972},[892,2735,1633],{"class":1669},[892,2737,1672],{"class":972},[892,2739,2740,2742,2744,2746],{"class":894,"line":1034},[892,2741,1677],{"class":986},[892,2743,1680],{"class":901},[892,2745,993],{"class":986},[892,2747,1685],{"class":972},[892,2749,2750,2752,2754,2756],{"class":894,"line":1039},[892,2751,1677],{"class":986},[892,2753,1692],{"class":901},[892,2755,993],{"class":986},[892,2757,1685],{"class":972},[892,2759,2760,2762,2764],{"class":894,"line":1045},[892,2761,1677],{"class":986},[892,2763,1491],{"class":901},[892,2765,1705],{"class":986},[892,2767,2768],{"class":894,"line":1067},[892,2769,1031],{"class":972},[882,2771,2772],{"className":1712,"code":1713,"language":5,"meta":888,"style":888},[840,2773,2774,2778,2796,2814,2832,2850,2864,2882,2900,2918,2936,2950,2964,2978,2992,3006,3020,3038,3054],{"__ignoreMap":888},[892,2775,2776],{"class":894,"line":895},[892,2777,1720],{"class":972},[892,2779,2780,2782,2784,2786,2788,2790,2792,2794],{"class":894,"line":999},[892,2781,1726],{"class":1725},[892,2783,1730],{"class":1729},[892,2785,1733],{"class":1725},[892,2787,1207],{"class":1110},[892,2789,1488],{"class":986},[892,2791,1740],{"class":901},[892,2793,1733],{"class":986},[892,2795,1685],{"class":972},[892,2797,2798,2800,2802,2804,2806,2808,2810,2812],{"class":894,"line":1005},[892,2799,1726],{"class":1725},[892,2801,1751],{"class":1729},[892,2803,1733],{"class":1725},[892,2805,1207],{"class":1110},[892,2807,1488],{"class":986},[892,2809,1760],{"class":901},[892,2811,1733],{"class":986},[892,2813,1685],{"class":972},[892,2815,2816,2818,2820,2822,2824,2826,2828,2830],{"class":894,"line":1012},[892,2817,1726],{"class":1725},[892,2819,1771],{"class":1729},[892,2821,1733],{"class":1725},[892,2823,1207],{"class":1110},[892,2825,1488],{"class":986},[892,2827,1780],{"class":901},[892,2829,1733],{"class":986},[892,2831,1685],{"class":972},[892,2833,2834,2836,2838,2840,2842,2844,2846,2848],{"class":894,"line":1034},[892,2835,1726],{"class":1725},[892,2837,1791],{"class":1729},[892,2839,1733],{"class":1725},[892,2841,1207],{"class":1110},[892,2843,1488],{"class":986},[892,2845,1800],{"class":901},[892,2847,1733],{"class":986},[892,2849,1685],{"class":972},[892,2851,2852,2854,2856,2858,2860,2862],{"class":894,"line":1039},[892,2853,1726],{"class":1725},[892,2855,1811],{"class":1729},[892,2857,1733],{"class":1725},[892,2859,1207],{"class":1110},[892,2861,1818],{"class":986},[892,2863,1685],{"class":972},[892,2865,2866,2868,2870,2872,2874,2876,2878,2880],{"class":894,"line":1045},[892,2867,1726],{"class":1725},[892,2869,1827],{"class":1729},[892,2871,1733],{"class":1725},[892,2873,1207],{"class":1110},[892,2875,1488],{"class":986},[892,2877,1144],{"class":901},[892,2879,1733],{"class":986},[892,2881,1685],{"class":972},[892,2883,2884,2886,2888,2890,2892,2894,2896,2898],{"class":894,"line":1067},[892,2885,1726],{"class":1725},[892,2887,1846],{"class":1729},[892,2889,1733],{"class":1725},[892,2891,1207],{"class":1110},[892,2893,1488],{"class":986},[892,2895,1116],{"class":901},[892,2897,1733],{"class":986},[892,2899,1685],{"class":972},[892,2901,2902,2904,2906,2908,2910,2912,2914,2916],{"class":894,"line":1252},[892,2903,1726],{"class":1725},[892,2905,1865],{"class":1729},[892,2907,1733],{"class":1725},[892,2909,1207],{"class":1110},[892,2911,1488],{"class":986},[892,2913,1144],{"class":901},[892,2915,1733],{"class":986},[892,2917,1685],{"class":972},[892,2919,2920,2922,2924,2926,2928,2930,2932,2934],{"class":894,"line":1264},[892,2921,1726],{"class":1725},[892,2923,1884],{"class":1729},[892,2925,1733],{"class":1725},[892,2927,1207],{"class":1110},[892,2929,1488],{"class":986},[892,2931,1180],{"class":901},[892,2933,1733],{"class":986},[892,2935,1685],{"class":972},[892,2937,2938,2940,2942,2944,2946,2948],{"class":894,"line":1276},[892,2939,1726],{"class":1725},[892,2941,1903],{"class":1729},[892,2943,1733],{"class":1725},[892,2945,1207],{"class":1110},[892,2947,1325],{"class":908},[892,2949,1685],{"class":972},[892,2951,2952,2954,2956,2958,2960,2962],{"class":894,"line":1288},[892,2953,1726],{"class":1725},[892,2955,1918],{"class":1729},[892,2957,1733],{"class":1725},[892,2959,1207],{"class":1110},[892,2961,1325],{"class":908},[892,2963,1685],{"class":972},[892,2965,2966,2968,2970,2972,2974,2976],{"class":894,"line":1300},[892,2967,1726],{"class":1725},[892,2969,1933],{"class":1729},[892,2971,1733],{"class":1725},[892,2973,1207],{"class":1110},[892,2975,1325],{"class":908},[892,2977,1685],{"class":972},[892,2979,2980,2982,2984,2986,2988,2990],{"class":894,"line":1312},[892,2981,1726],{"class":1725},[892,2983,1948],{"class":1729},[892,2985,1733],{"class":1725},[892,2987,1207],{"class":1110},[892,2989,1325],{"class":908},[892,2991,1685],{"class":972},[892,2993,2994,2996,2998,3000,3002,3004],{"class":894,"line":1330},[892,2995,1726],{"class":1725},[892,2997,1963],{"class":1729},[892,2999,1733],{"class":1725},[892,3001,1207],{"class":1110},[892,3003,1325],{"class":908},[892,3005,1685],{"class":972},[892,3007,3008,3010,3012,3014,3016,3018],{"class":894,"line":1346},[892,3009,1726],{"class":1725},[892,3011,1978],{"class":1729},[892,3013,1733],{"class":1725},[892,3015,1207],{"class":1110},[892,3017,1818],{"class":986},[892,3019,1685],{"class":972},[892,3021,3022,3024,3026,3028,3030,3032,3034,3036],{"class":894,"line":1362},[892,3023,1726],{"class":1725},[892,3025,1993],{"class":1729},[892,3027,1733],{"class":1725},[892,3029,1207],{"class":1110},[892,3031,1488],{"class":986},[892,3033,2002],{"class":901},[892,3035,1733],{"class":986},[892,3037,1685],{"class":972},[892,3039,3040,3042,3044,3046,3048,3050,3052],{"class":894,"line":1378},[892,3041,1726],{"class":1725},[892,3043,2013],{"class":1729},[892,3045,1733],{"class":1725},[892,3047,1207],{"class":1110},[892,3049,1488],{"class":986},[892,3051,2022],{"class":901},[892,3053,1494],{"class":986},[892,3055,3056],{"class":894,"line":1394},[892,3057,1433],{"class":972},[2030,3059,3060],{},[821,3061,2034,3062,2037],{},[825,3063,393],{"href":394},[2039,3065,2041],{},{"title":888,"searchDepth":999,"depth":999,"links":3067},[3068,3069,3070,3071],{"id":849,"depth":999,"text":850},{"id":876,"depth":999,"text":877},{"id":1091,"depth":999,"text":1092},{"id":1438,"depth":999,"text":1439},{},{"title":119,"description":2048},1780436289507]