From f67d574ed30402a5878fdd3cac2692a57946bffe Mon Sep 17 00:00:00 2001 From: GitHub workflow <2769109+epoberezkin@users.noreply.github.com> Date: Wed, 19 Jun 2024 22:00:19 +0000 Subject: [PATCH] updated by ajv workflow https://github.com/ajv-validator/ajv/actions/runs/9588553104 --- 404.html | 8 +- api.html | 6 +- assets/css/0.styles.d11746c6.css | 1 + assets/img/contributors.9bc93581.jpg | Bin 0 -> 245926 bytes assets/js/21.3c2ce195.js | 1 + assets/js/56.4842697a.js | 1 + assets/js/64.b63ba4c7.js | 1 + assets/js/74.dc73eb16.js | 1 + assets/js/78.bbc865a6.js | 1 + assets/js/app.a90f783e.js | 16 + code_of_conduct/index.html | 6 +- codegen.html | 6 +- coercion.html | 6 +- components.html | 6 +- contributing/index.html | 6 +- faq.html | 6 +- guide/async-validation.html | 6 +- guide/combining-schemas.html | 6 +- guide/environments.html | 6 +- guide/formats.html | 6 +- guide/getting-started.html | 6 +- guide/managing-schemas.html | 8 +- guide/modifying-data.html | 6 +- guide/schema-language.html | 6 +- guide/typescript.html | 6 +- guide/user-keywords.html | 6 +- guide/why-ajv.html | 6 +- index.html | 374 +++++++++--------- json-schema.html | 6 +- json-type-definition.html | 6 +- keywords.html | 6 +- license.html | 6 +- ...08-14-mozilla-grant-openjs-foundation.html | 6 +- news/2020-12-15-ajv-version-7-released.html | 6 +- ...-07-ajv-supports-json-type-definition.html | 6 +- news/2021-03-27-ajv-version-8-released.html | 6 +- news/2021-04-24-ajv-online-event.html | 6 +- news/2021-05-24-ajv-online-event-video.html | 6 +- ...1-07-22-ajv-microsoft-foss-fund-award.html | 6 +- news/index.html | 6 +- options.html | 6 +- packages/ajv-cli.html | 6 +- packages/ajv-errors.html | 6 +- packages/ajv-formats.html | 6 +- packages/ajv-i18n.html | 6 +- packages/ajv-keywords.html | 6 +- packages/index.html | 6 +- security.html | 6 +- standalone.html | 6 +- strict-mode.html | 6 +- testimonials.html | 6 +- v6-to-v8-migration.html | 6 +- 52 files changed, 341 insertions(+), 317 deletions(-) create mode 100644 assets/css/0.styles.d11746c6.css create mode 100644 assets/img/contributors.9bc93581.jpg create mode 100644 assets/js/21.3c2ce195.js create mode 100644 assets/js/56.4842697a.js create mode 100644 assets/js/64.b63ba4c7.js create mode 100644 assets/js/74.dc73eb16.js create mode 100644 assets/js/78.bbc865a6.js create mode 100644 assets/js/app.a90f783e.js diff --git a/404.html b/404.html index 67b73ffea..1e19f4326 100644 --- a/404.html +++ b/404.html @@ -18,13 +18,13 @@ - - + + -

404

There's nothing here.
+ - + diff --git a/api.html b/api.html index 01d01adae..69ac45ac9 100644 --- a/api.html +++ b/api.html @@ -18,8 +18,8 @@ - - + +
- + diff --git a/assets/css/0.styles.d11746c6.css b/assets/css/0.styles.d11746c6.css new file mode 100644 index 000000000..ba4890d22 --- /dev/null +++ b/assets/css/0.styles.d11746c6.css @@ -0,0 +1 @@ +code[class*=language-],pre[class*=language-]{color:#ccc;background:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#2d2d2d}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.block-comment,.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#999}.token.punctuation{color:#ccc}.token.attr-name,.token.deleted,.token.namespace,.token.tag{color:#e2777a}.token.function-name{color:#6196cc}.token.boolean,.token.function,.token.number{color:#f08d49}.token.class-name,.token.constant,.token.property,.token.symbol{color:#f8c555}.token.atrule,.token.builtin,.token.important,.token.keyword,.token.selector{color:#cc99cd}.token.attr-value,.token.char,.token.regex,.token.string,.token.variable{color:#7ec699}.token.entity,.token.operator,.token.url{color:#67cdcc}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.inserted{color:green}.theme-default-content code{color:#545252;padding:.25rem .5rem;margin:0;font-size:.85em;background-color:rgba(27,31,35,.05);border-radius:3px}.theme-default-content code .token.deleted{color:#ec5975}.theme-default-content code .token.inserted{color:#07aab4}.theme-default-content pre,.theme-default-content pre[class*=language-]{line-height:1.4;padding:1.25rem 1.5rem;margin:.85rem 0;background-color:#282c34;border-radius:6px;overflow:auto}.theme-default-content pre[class*=language-] code,.theme-default-content pre code{color:#fff;padding:0;background-color:transparent;border-radius:0}div[class*=language-]{position:relative;background-color:#282c34;border-radius:6px}div[class*=language-] .highlight-lines{-webkit-user-select:none;user-select:none;padding-top:1.3rem;position:absolute;top:0;left:0;width:100%;line-height:1.4}div[class*=language-] .highlight-lines .highlighted{background-color:rgba(0,0,0,.66)}div[class*=language-] pre,div[class*=language-] pre[class*=language-]{background:transparent;position:relative;z-index:1}div[class*=language-]:before{position:absolute;z-index:3;top:.8em;right:1em;font-size:.75rem;color:hsla(0,0%,100%,.4)}div[class*=language-]:not(.line-numbers-mode) .line-numbers-wrapper{display:none}div[class*=language-].line-numbers-mode .highlight-lines .highlighted{position:relative}div[class*=language-].line-numbers-mode .highlight-lines .highlighted:before{content:" ";position:absolute;z-index:3;left:0;top:0;display:block;width:3.5rem;height:100%;background-color:rgba(0,0,0,.66)}div[class*=language-].line-numbers-mode pre{padding-left:4.5rem;vertical-align:middle}div[class*=language-].line-numbers-mode .line-numbers-wrapper{position:absolute;top:0;width:3.5rem;text-align:center;color:hsla(0,0%,100%,.3);padding:1.25rem 0;line-height:1.4}div[class*=language-].line-numbers-mode .line-numbers-wrapper br{-webkit-user-select:none;user-select:none}div[class*=language-].line-numbers-mode .line-numbers-wrapper .line-number{position:relative;z-index:4;-webkit-user-select:none;user-select:none;font-size:.85em}div[class*=language-].line-numbers-mode:after{content:"";position:absolute;z-index:2;top:0;left:0;width:3.5rem;height:100%;border-radius:6px 0 0 6px;border-right:1px solid rgba(0,0,0,.66);background-color:#282c34}div[class~=language-js]:before{content:"js"}div[class~=language-ts]:before{content:"ts"}div[class~=language-html]:before{content:"html"}div[class~=language-md]:before{content:"md"}div[class~=language-vue]:before{content:"vue"}div[class~=language-css]:before{content:"css"}div[class~=language-sass]:before{content:"sass"}div[class~=language-scss]:before{content:"scss"}div[class~=language-less]:before{content:"less"}div[class~=language-stylus]:before{content:"stylus"}div[class~=language-go]:before{content:"go"}div[class~=language-java]:before{content:"java"}div[class~=language-c]:before{content:"c"}div[class~=language-sh]:before{content:"sh"}div[class~=language-yaml]:before{content:"yaml"}div[class~=language-py]:before{content:"py"}div[class~=language-docker]:before{content:"docker"}div[class~=language-dockerfile]:before{content:"dockerfile"}div[class~=language-makefile]:before{content:"makefile"}div[class~=language-javascript]:before{content:"js"}div[class~=language-typescript]:before{content:"ts"}div[class~=language-markup]:before{content:"html"}div[class~=language-markdown]:before{content:"md"}div[class~=language-json]:before{content:"json"}div[class~=language-ruby]:before{content:"rb"}div[class~=language-python]:before{content:"py"}div[class~=language-bash]:before{content:"sh"}div[class~=language-php]:before{content:"php"}.custom-block .custom-block-title{font-weight:600;margin-bottom:-.4rem}.custom-block.danger,.custom-block.tip,.custom-block.warning{padding:.1rem 1.5rem;border-left-width:.5rem;border-left-style:solid;margin:1rem 0}.custom-block.tip{background-color:#f3f5f7;border-color:#42b983}.custom-block.warning{background-color:rgba(255,229,100,.3);border-color:#e7c000;color:#6b5900}.custom-block.warning .custom-block-title{color:#b29400}.custom-block.warning a{color:#292828}.custom-block.danger{background-color:#ffe6e6;border-color:#c00;color:#4d0000}.custom-block.danger .custom-block-title{color:#900}.custom-block.danger a{color:#292828}.custom-block.details{display:block;position:relative;border-radius:2px;margin:1.6em 0;padding:1.6em;background-color:#eee}.custom-block.details h4{margin-top:0}.custom-block.details figure:last-child,.custom-block.details p:last-child{margin-bottom:0;padding-bottom:0}.custom-block.details summary{outline:none;cursor:pointer}.arrow{display:inline-block;width:0;height:0}.arrow.up{border-bottom:6px solid #ccc}.arrow.down,.arrow.up{border-left:4px solid transparent;border-right:4px solid transparent}.arrow.down{border-top:6px solid #ccc}.arrow.right{border-left:6px solid #ccc}.arrow.left,.arrow.right{border-top:4px solid transparent;border-bottom:4px solid transparent}.arrow.left{border-right:6px solid #ccc}.theme-default-content:not(.custom){max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.theme-default-content:not(.custom){padding:2rem}}@media (max-width:480px){.theme-default-content:not(.custom){padding:1.5rem}}.table-of-contents .badge{vertical-align:middle}body,html{padding:0;margin:0;background-color:#fff}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:16px;color:#292828}.page{padding-left:20rem}.navbar{z-index:20;right:0;height:3.6rem;background-color:#fff;box-sizing:border-box;border-bottom:1px solid #eaecef}.navbar,.sidebar-mask{position:fixed;top:0;left:0}.sidebar-mask{z-index:9;width:100vw;height:100vh;display:none}.sidebar{font-size:16px;background-color:#fff;width:20rem;position:fixed;z-index:10;margin:0;top:3.6rem;left:0;bottom:0;box-sizing:border-box;border-right:1px solid #eaecef;overflow-y:auto}.theme-default-content:not(.custom)>:first-child{margin-top:3.6rem}.theme-default-content:not(.custom) a:hover{text-decoration:underline}.theme-default-content:not(.custom) p.demo{padding:1rem 1.5rem;border:1px solid #ddd;border-radius:4px}.theme-default-content:not(.custom) img{max-width:100%}.theme-default-content.custom{padding:0;margin:0}.theme-default-content.custom img{max-width:100%}a{font-weight:500;text-decoration:none}a,p a code{color:#07aab4}p a code{font-weight:400}kbd{background:#eee;border:.15rem solid #ddd;border-bottom:.25rem solid #ddd;border-radius:.15rem;padding:0 .15em}blockquote{font-size:1rem;color:#999;border-left:.2rem solid #dfe2e5;margin:1rem 0;padding:.25rem 0 .25rem 1rem}blockquote>p{margin:0}ol,ul{padding-left:1.2em}strong{font-weight:600}h1,h2,h3,h4,h5,h6{font-weight:600;line-height:1.25}.theme-default-content:not(.custom)>h1,.theme-default-content:not(.custom)>h2,.theme-default-content:not(.custom)>h3,.theme-default-content:not(.custom)>h4,.theme-default-content:not(.custom)>h5,.theme-default-content:not(.custom)>h6{margin-top:-3.1rem;padding-top:4.6rem;margin-bottom:0}.theme-default-content:not(.custom)>h1:first-child,.theme-default-content:not(.custom)>h2:first-child,.theme-default-content:not(.custom)>h3:first-child,.theme-default-content:not(.custom)>h4:first-child,.theme-default-content:not(.custom)>h5:first-child,.theme-default-content:not(.custom)>h6:first-child{margin-top:-1.5rem;margin-bottom:1rem}.theme-default-content:not(.custom)>h1:first-child+.custom-block,.theme-default-content:not(.custom)>h1:first-child+p,.theme-default-content:not(.custom)>h1:first-child+pre,.theme-default-content:not(.custom)>h2:first-child+.custom-block,.theme-default-content:not(.custom)>h2:first-child+p,.theme-default-content:not(.custom)>h2:first-child+pre,.theme-default-content:not(.custom)>h3:first-child+.custom-block,.theme-default-content:not(.custom)>h3:first-child+p,.theme-default-content:not(.custom)>h3:first-child+pre,.theme-default-content:not(.custom)>h4:first-child+.custom-block,.theme-default-content:not(.custom)>h4:first-child+p,.theme-default-content:not(.custom)>h4:first-child+pre,.theme-default-content:not(.custom)>h5:first-child+.custom-block,.theme-default-content:not(.custom)>h5:first-child+p,.theme-default-content:not(.custom)>h5:first-child+pre,.theme-default-content:not(.custom)>h6:first-child+.custom-block,.theme-default-content:not(.custom)>h6:first-child+p,.theme-default-content:not(.custom)>h6:first-child+pre{margin-top:2rem}h1:focus .header-anchor,h1:hover .header-anchor,h2:focus .header-anchor,h2:hover .header-anchor,h3:focus .header-anchor,h3:hover .header-anchor,h4:focus .header-anchor,h4:hover .header-anchor,h5:focus .header-anchor,h5:hover .header-anchor,h6:focus .header-anchor,h6:hover .header-anchor{opacity:1}h1{font-size:2.2rem}h2{font-size:1.65rem;padding-bottom:.3rem;border-bottom:1px solid #eaecef}h3{font-size:1.35rem}a.header-anchor{font-size:.85em;float:left;margin-left:-.87em;padding-right:.23em;margin-top:.125em;opacity:0}a.header-anchor:focus,a.header-anchor:hover{text-decoration:none}.line-number,code,kbd{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}ol,p,ul{line-height:1.7}hr{border:0;border-top:1px solid #eaecef}table{border-collapse:collapse;margin:1rem 0;display:block;overflow-x:auto}tr{border-top:1px solid #dfe2e5}tr:nth-child(2n){background-color:#f6f8fa}td,th{border:1px solid #dfe2e5;padding:.6em 1em}.theme-container.sidebar-open .sidebar-mask{display:block}.theme-container.no-navbar .theme-default-content:not(.custom)>h1,.theme-container.no-navbar h2,.theme-container.no-navbar h3,.theme-container.no-navbar h4,.theme-container.no-navbar h5,.theme-container.no-navbar h6{margin-top:1.5rem;padding-top:0}.theme-container.no-navbar .sidebar{top:0}@media (min-width:720px){.theme-container.no-sidebar .sidebar{display:none}.theme-container.no-sidebar .page{padding-left:0}}@media (max-width:959px){.sidebar{font-size:15px;width:16.4rem}.page{padding-left:16.4rem}}@media (max-width:719px){.sidebar{top:0;padding-top:3.6rem;transform:translateX(-100%);transition:transform .2s ease}.page{padding-left:0}.theme-container.sidebar-open .sidebar{transform:translateX(0)}.theme-container.no-navbar .sidebar{padding-top:0}}@media (max-width:480px){h1{font-size:1.9rem}.theme-default-content div[class*=language-]{margin:.85rem -1.5rem;border-radius:0}}img+span>.icon.outbound{display:none}body{font-family:Raleway;font-weight:400}strong{font-weight:550}h1,h2,h3,h4,h5,h6{font-family:IstokWeb;font-weight:400}.custom-block.tip{border-color:#23c8d2;background-color:#f7f7f3;color:#292828}.custom-block.tip .custom-block-title{color:#292828}.custom-block.warning{border-color:#f1f440;background-color:#f7f7f3;color:#292828}.custom-block.warning .custom-block-title{color:#292828}.custom-block.danger{border-color:#f5775b;background-color:#f7f7f3;color:#292828}.custom-block.danger .custom-block-title{color:#292828}.sidebar nav.nav-links div.nav-item{display:none}span.badge{font-family:Raleway;font-weight:500}.theme-code-group .token.string{color:#7ec699}.theme-code-group button.theme-code-group__nav-tab.theme-code-group__nav-tab-active{border-color:#7ec699}.navbar span.site-name{font-family:IstokWeb;font-weight:500;font-size:1.6em}p.sidebar-heading{font-weight:500;font-size:1em}a.sidebar-link.active{font-weight:500!important}@font-face{font-family:Raleway;src:url(/fonts/Raleway-VariableFont_wght.ttf)}@font-face{font-family:IstokWeb;src:url(/fonts/IstokWeb-Regular.ttf);font-weight:400}#nprogress{pointer-events:none}#nprogress .bar{background:#07aab4;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #07aab4,0 0 5px #07aab4;opacity:1;transform:rotate(3deg) translateY(-4px)}#nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border-color:#07aab4 transparent transparent #07aab4;border-style:solid;border-width:2px;border-radius:50%;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.icon.outbound{color:#aaa;display:inline-block;vertical-align:middle;position:relative;top:-1px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.algolia-search-wrapper>span{vertical-align:middle}.algolia-search-wrapper .algolia-autocomplete{line-height:normal}.algolia-search-wrapper .algolia-autocomplete .ds-dropdown-menu{background-color:#fff;border:1px solid #999;border-radius:4px;font-size:16px;margin:6px 0 0;padding:4px;text-align:left}.algolia-search-wrapper .algolia-autocomplete .ds-dropdown-menu:before{border-color:#999}.algolia-search-wrapper .algolia-autocomplete .ds-dropdown-menu [class*=ds-dataset-]{border:none;padding:0}.algolia-search-wrapper .algolia-autocomplete .ds-dropdown-menu .ds-suggestions{margin-top:0}.algolia-search-wrapper .algolia-autocomplete .ds-dropdown-menu .ds-suggestion{border-bottom:1px solid #eaecef}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion--highlight{color:#2c815b}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion{border-color:#eaecef;padding:0}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--category-header{padding:5px 10px;margin-top:0;background:#07aab4;color:#fff;font-weight:600}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--highlight{background:hsla(0,0%,100%,.6)}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--wrapper{padding:0}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--title{font-weight:600;margin-bottom:0;color:#292828}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column{vertical-align:top;padding:5px 7px 5px 5px;border-color:#eaecef;background:#f1f3f5}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column:after{display:none}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column-text{color:#555}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-footer{border-color:#eaecef}.algolia-search-wrapper .algolia-autocomplete .ds-cursor .algolia-docsearch-suggestion--content{background-color:#e7edf3!important;color:#292828}@media (min-width:719px){.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column{float:none;width:150px;min-width:150px;display:table-cell}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--content{float:none;display:table-cell;width:100%;vertical-align:top}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .ds-dropdown-menu{min-width:515px!important}}@media (max-width:719px){.algolia-search-wrapper .ds-dropdown-menu{min-width:calc(100vw - 4rem)!important;max-width:calc(100vw - 4rem)!important}.algolia-search-wrapper .algolia-docsearch-suggestion--wrapper{padding:5px 7px 5px 5px!important}.algolia-search-wrapper .algolia-docsearch-suggestion--subcategory-column{padding:0!important;background:#fff!important}.algolia-search-wrapper .algolia-docsearch-suggestion--subcategory-column-text:after{content:" > ";font-size:10px;line-height:14.4px;display:inline-block;width:5px;margin:-3px 3px 0;vertical-align:middle}}.home{padding:3.6rem 2rem 0;max-width:960px;margin:0 auto;display:block}.home .hero{text-align:center}.home .hero img{max-width:100%;max-height:280px;display:block;margin:3rem auto 1.5rem}.home .hero h1{font-size:3rem}.home .hero .action,.home .hero .description,.home .hero h1{margin:1.8rem auto}.home .hero .description{max-width:35rem;font-size:1.6rem;line-height:1.3;color:#807d7d}.home .hero .action-button{display:inline-block;font-size:1.2rem;color:#fff;background-color:#07aab4;padding:.8rem 1.6rem;border-radius:4px;transition:background-color .1s ease;box-sizing:border-box;border-bottom:1px solid #0699a2}.home .hero .action-button:hover{background-color:#08c7d3}.home .features{border-top:1px solid #eaecef;padding:1.2rem 0;margin-top:2.5rem;display:flex;flex-wrap:wrap;align-items:flex-start;align-content:stretch;justify-content:space-between}.home .feature{flex-grow:1;flex-basis:30%;max-width:30%}.home .feature h2{font-size:1.4rem;font-weight:500;border-bottom:none;padding-bottom:0;color:#3f3d3d}.home .feature p{color:#5f5d5d}.home .footer{padding:2.5rem;border-top:1px solid #eaecef;text-align:center;color:#5f5d5d}@media (max-width:719px){.home .features{flex-direction:column}.home .feature{max-width:100%;padding:0 2.5rem}}@media (max-width:480px){.home{padding-left:1.5rem;padding-right:1.5rem}.home .hero img{max-height:210px;margin:2rem auto 1.2rem}.home .hero h1{font-size:2rem}.home .hero .action,.home .hero .description,.home .hero h1{margin:1.2rem auto}.home .hero .description{font-size:1.2rem}.home .hero .action-button{font-size:1rem;padding:.6rem 1.2rem}.home .feature h2{font-size:1.25rem}}.search-box{display:inline-block;position:relative;margin-right:1rem}.search-box input{cursor:text;width:10rem;height:2rem;color:#5f5d5d;display:inline-block;border:1px solid #cfd4db;border-radius:2rem;font-size:.9rem;line-height:2rem;padding:0 .5rem 0 2rem;outline:none;transition:all .2s ease;background:#fff url(/assets/img/search.83621669.svg) .6rem .5rem no-repeat;background-size:1rem}.search-box input:focus{cursor:auto;border-color:#07aab4}.search-box .suggestions{background:#fff;width:20rem;position:absolute;top:2rem;border:1px solid #cfd4db;border-radius:6px;padding:.4rem;list-style-type:none}.search-box .suggestions.align-right{right:0}.search-box .suggestion{line-height:1.4;padding:.4rem .6rem;border-radius:4px;cursor:pointer}.search-box .suggestion a{white-space:normal;color:#757272}.search-box .suggestion a .page-title{font-weight:600}.search-box .suggestion a .header{font-size:.9em;margin-left:.25em}.search-box .suggestion.focused{background-color:#f3f4f5}.search-box .suggestion.focused a{color:#07aab4}@media (max-width:959px){.search-box input{cursor:pointer;width:0;border-color:transparent;position:relative}.search-box input:focus{cursor:text;left:0;width:10rem}}@media (-ms-high-contrast:none){.search-box input{height:2rem}}@media (max-width:959px) and (min-width:719px){.search-box .suggestions{left:0}}@media (max-width:719px){.search-box{margin-right:0}.search-box input{left:1rem}.search-box .suggestions{right:0}}@media (max-width:480px){.search-box .suggestions{width:calc(100vw - 4rem)}.search-box input:focus{width:8rem}}.sidebar-button{cursor:pointer;display:none;width:1.25rem;height:1.25rem;position:absolute;padding:.6rem;top:.6rem;left:1rem}.sidebar-button .icon{display:block;width:1.25rem;height:1.25rem}@media (max-width:719px){.sidebar-button{display:block}}.dropdown-enter,.dropdown-leave-to{height:0!important}.badge[data-v-6eb0829b]{display:inline-block;font-size:14px;height:18px;line-height:18px;border-radius:3px;padding:0 6px;color:#fff;background-color:#42b983}.badge.green[data-v-6eb0829b],.badge.tip[data-v-6eb0829b]{background-color:#23c8d2}.badge.error[data-v-6eb0829b]{background-color:#f5775b}.badge.warn[data-v-6eb0829b],.badge.warning[data-v-6eb0829b],.badge.yellow[data-v-6eb0829b]{background-color:#e9c400}.badge+.badge[data-v-6eb0829b]{margin-left:5px}.theme-code-block[data-v-311ec9b4]{display:none}.theme-code-block__active[data-v-311ec9b4]{display:block}.theme-code-block>pre[data-v-311ec9b4]{background-color:orange}.theme-code-group__nav[data-v-5cad0a2e]{margin-bottom:-35px;background-color:#282c34;padding-bottom:22px;border-top-left-radius:6px;border-top-right-radius:6px;padding-left:10px;padding-top:10px}.theme-code-group__ul[data-v-5cad0a2e]{margin:auto 0;padding-left:0;display:inline-flex;list-style:none}.theme-code-group__nav-tab[data-v-5cad0a2e]{border:0;padding:5px;cursor:pointer;background-color:transparent;font-size:.85em;line-height:1.4;color:hsla(0,0%,100%,.9);font-weight:600}.theme-code-group__nav-tab-active[data-v-5cad0a2e]{border-bottom:1px solid #42b983}.pre-blank[data-v-5cad0a2e]{color:#42b983}a.button[data-v-439d4a3b]{display:block;width:114px;height:38px;line-height:38px;background-color:#23c8d2;border-radius:6px;color:#fff;text-align:center;font-weight:600}.column[data-v-71066fea]{margin-bottom:22px}@media only screen and (min-width:719px){.column.left[data-v-71066fea]{width:33%;margin-right:5%}.column.right[data-v-71066fea]{width:62%}}@media only screen and (min-width:719px){.columns[data-v-6d930324]{display:flex}}.contributor[data-v-074475b8]{width:3.26em;height:3.26em;border-radius:50%;text-indent:-9999px;display:inline-block;background:no-repeat url(/assets/img/contributors.9bc93581.jpg);background-size:auto 102%;margin:0 .67em .67em 0;border:2px solid var(--second)}@media only screen and (min-width:414px){.contributor[data-v-074475b8]{width:3.625em;height:3.625em;margin:0 .8em .8em 0}}div[data-v-20681dd8]{height:200px;box-sizing:border-box;padding:28px;border-radius:8px;position:relative;color:#fff;margin-bottom:25px}@media only screen and (min-width:480px){div[data-v-20681dd8]{height:160px}}@media only screen and (min-width:719px){div[data-v-20681dd8]{width:31.25%;height:225px;margin-right:3%;margin-bottom:0}}div h3[data-v-20681dd8]{margin:0}@media only screen and (min-width:959px){div h3[data-v-20681dd8]{font-size:1.75em}}div h3 .header-anchor[data-v-20681dd8]{display:none}@media only screen and (min-width:959px){div p[data-v-20681dd8]{font-size:1.25em}}div.less-code[data-v-20681dd8]{background-color:#23c8d2}div.fast-secure[data-v-20681dd8]{background-color:#409cff}div.multi-spec[data-v-20681dd8]{background-color:#f5775b}@media only screen and (min-width:719px){div[data-v-20681dd8]:last-child{margin-right:0}}a[data-v-20681dd8]{position:absolute;bottom:24px;right:24px;color:#fff}.features[data-v-30c230c6]{padding:60px 0}@media only screen and (min-width:719px){.features[data-v-30c230c6]{display:flex}}@media only screen and (min-width:719px){div[data-v-f7c18a96]{width:25%}}p a[data-v-f7c18a96]{color:#292828;font-weight:400}p a[data-v-f7c18a96]:hover{text-decoration:underline}@media only screen and (max-width:719px){p[data-v-f7c18a96]{margin:0;line-height:30px}}.column img[data-v-f7c18a96]{display:block;margin:0 auto}.column.ajv img[data-v-f7c18a96]{margin:0;width:100px}@media only screen and (max-width:719px){.column.ajv img[data-v-f7c18a96]{margin-bottom:34px}}.column.links a[data-v-f7c18a96]{color:#292828;font-weight:400}@media only screen and (max-width:719px){.column.sponsors a[data-v-f7c18a96]:first-child{display:block;margin-top:80px}}.column.sponsors img[data-v-f7c18a96]{width:140px;padding:0 20px 15px}.footer-columns[data-v-de1d7950]{padding:20px 0 60px;border-bottom:1px solid #c4c4c4}@media only screen and (min-width:719px){.footer-columns[data-v-de1d7950]{display:flex}}span[data-v-3ac601d9]{vertical-align:-8px;padding-left:20px}@media only screen and (max-width:719px){span[data-v-3ac601d9]{vertical-align:-21px}}.hero-section[data-v-37c67372]{width:100%;padding:3.6rem 0 50px;overflow:hidden;background:linear-gradient(304.33deg,hsla(0,0%,92.9%,.31) -7.48%,#c6e1ff 30.07%,hsla(0,0%,92.9%,.26) 82.76%)}.hero-section .section-content[data-v-37c67372]{position:relative;max-width:1000px;padding:0 50px;margin:0 auto}@media only screen and (max-width:719px){.hero-section .section-content[data-v-37c67372]{padding:0 40px}}@media only screen and (max-width:480px){.hero-section .section-content[data-v-37c67372]{padding:0 30px}}.hero-section .section-content .section-content-wrapper[data-v-37c67372]{position:relative;z-index:2}.hero-section .hero-image[data-v-37c67372]{position:absolute;z-index:1;width:658px;top:-400px;left:-25px}@media only screen and (min-width:480px){.hero-section .hero-image[data-v-37c67372]{width:823px;top:-500px;left:50px}}@media only screen and (min-width:719px){.hero-section .hero-image[data-v-37c67372]{top:-430px;left:330px}}@media only screen and (min-width:959px){.hero-section .hero-image[data-v-37c67372]{width:1097px;top:-575px;left:425px}}.hero-section .header-anchor[data-v-37c67372]{display:none}.hero-section h1[data-v-37c67372]{font-size:2em;margin-top:200px}.hero-section h2[data-v-37c67372]{border-bottom:none}@media only screen and (min-width:480px){.hero-section h1[data-v-37c67372]{font-size:3em}.hero-section h2[data-v-37c67372]{font-size:1.75em}}@media only screen and (min-width:719px){.hero-section h1[data-v-37c67372],.hero-section h2[data-v-37c67372]{margin-left:48px}}@media only screen and (min-width:959px){.hero-section h1[data-v-37c67372]{font-size:4em}.hero-section h2[data-v-37c67372]{font-size:2.25em}.hero-section h1[data-v-37c67372],.hero-section h2[data-v-37c67372]{margin-left:64px}}.homepage[data-v-07ee638e]{padding:0;box-sizing:content-box}.home-section[data-v-aed41194]{width:100%;padding:3.6rem 0 50px}.home-section .section-content[data-v-aed41194]{max-width:1000px;padding:0 50px;margin:0 auto}@media only screen and (max-width:719px){.home-section .section-content[data-v-aed41194]{padding:0 40px}}@media only screen and (max-width:480px){.home-section .section-content[data-v-aed41194]{padding:0 30px}}.home-section[data-v-aed41194] .theme-code-group button{position:relative;outline:none;z-index:1}.home-section.contributors[data-v-aed41194],.home-section.footer[data-v-aed41194],.home-section.testimonials[data-v-aed41194]{background:linear-gradient(295.26deg,hsla(0,0%,91%,.8) 26.65%,hsla(0,0%,100%,.04) 83.48%)}.home-section.footer p[data-v-aed41194]{padding:20px 0 0;text-align:center;color:#292828}.home-section.footer p a[data-v-aed41194]{color:#292828;font-weight:400}.home-section.footer p a[data-v-aed41194]:hover{text-decoration:underline}.post[data-v-a228e400]{display:flex;border-bottom:1px solid #eaecef}.post[data-v-a228e400]:last-child{border-bottom:none}.post a.read-more[data-v-a228e400]{float:right;margin:28px 0}p.subscribe[data-v-a228e400]{margin-top:2em}p.subscribe a.all-news[data-v-a228e400]{display:block;margin-top:1rem}@media only screen and (min-width:480px){p.subscribe a.all-news[data-v-a228e400]{display:inline-block;float:right;margin-top:0}}.post-meta>div[data-v-f7ce3066]{display:inline-flex}.pub-date[data-v-f7ce3066]{color:grey}.projects p[data-v-7ef3dfe8]{max-width:1100px;padding:0}.projects img[data-v-7ef3dfe8]{display:inline-block;max-width:240px;height:40px;line-height:40px;vertical-align:middle}@media only screen and (max-width:719px){.projects img[data-v-7ef3dfe8]{max-width:160px;height:30px;line-height:30px}}.projects a[data-v-7ef3dfe8]{display:inline-block;height:40px;line-height:40px;vertical-align:middle;margin:0 36px 30px 0;font-size:28px;font-weight:500;color:#292828}@media only screen and (max-width:719px){.projects a[data-v-7ef3dfe8]{margin:0 24px 20px 0;height:30px;line-height:30px;font-size:20px}}.projects a[data-v-7ef3dfe8]:hover{text-decoration:none}.projects a span[data-v-7ef3dfe8]{display:none}.sponsors[data-v-c1b00a8c]{max-width:800px;margin:0 auto}.sponsors h2[data-v-c1b00a8c]{margin-left:0;text-decoration:none}.sponsors h2 a.header-anchor[data-v-c1b00a8c]{width:auto;margin-right:0}.sponsors p[data-v-c1b00a8c]{font-size:24px}.sponsors.bronze img[data-v-c1b00a8c],.sponsors.gold img[data-v-c1b00a8c],.sponsors.platinum img[data-v-c1b00a8c]{width:100%}.sponsors.bronze a[data-v-c1b00a8c],.sponsors.gold a[data-v-c1b00a8c],.sponsors.platinum a[data-v-c1b00a8c]{margin-bottom:10px;display:inline-block}@media only screen and (min-width:480px){.sponsors.bronze a[data-v-c1b00a8c],.sponsors.gold a[data-v-c1b00a8c],.sponsors.platinum a[data-v-c1b00a8c]{margin-bottom:0}}.sponsors.bronze a[data-v-c1b00a8c]:last-child,.sponsors.gold a[data-v-c1b00a8c]:last-child,.sponsors.platinum a[data-v-c1b00a8c]:last-child{margin-right:0}.sponsors.platinum a[data-v-c1b00a8c]{width:100%;display:block}@media only screen and (min-width:480px){.sponsors.platinum a[data-v-c1b00a8c]{display:inline-block;width:45%;margin-right:8%}}.sponsors.gold a[data-v-c1b00a8c]{width:45%;margin-right:4%}@media only screen and (min-width:480px){.sponsors.gold a[data-v-c1b00a8c]{width:31%;margin-right:2%}}.sponsors.bronze a[data-v-c1b00a8c]{width:45%;margin-right:4%}@media only screen and (min-width:480px){.sponsors.bronze a[data-v-c1b00a8c]{width:22%;margin-right:3%}}form[data-v-410e8fc2]{display:inline-block}label[data-v-410e8fc2]{display:block;margin-bottom:1rem}@media only screen and (min-width:719px){label[data-v-410e8fc2]{display:inline-block;margin-bottom:0}}button[data-v-410e8fc2],input[data-v-410e8fc2]{font-family:Raleway;font-size:16px;border:0 solid;outline:none}input[data-v-410e8fc2]{border:1px solid #cfd4db;height:2rem;width:180px;border-radius:2rem;padding:0 .5rem;margin:0 .5rem 0 0}input[data-v-410e8fc2]:focus{border-color:#07aab4}@media only screen and (min-width:719px){input[data-v-410e8fc2]{width:200px;margin:0 1rem}}button[data-v-410e8fc2]{width:114px;height:36px;line-height:36px;padding-top:0;background-color:#23c8d2;border-radius:6px;color:#fff;text-align:center;font-weight:600;display:block;margin-top:1em}@media only screen and (min-width:414px){button[data-v-410e8fc2]{display:inline-block;margin-top:0}}div.testimonial-content[data-v-2c05e654]{background-position:50%;overflow:hidden;width:280px;background-repeat:no-repeat}div.testimonial-content.blue[data-v-2c05e654]{background-image:url(/assets/img/testimonials-blue.868231a8.svg)}div.testimonial-content.green[data-v-2c05e654]{background-image:url(/assets/img/testimonials-green.6fdaa89c.svg)}div.testimonial-content p[data-v-2c05e654]{margin:.9em 0;font-size:15px}@media only screen and (max-width:374px){div.testimonial-content.blue[data-v-2c05e654],div.testimonial-content.green[data-v-2c05e654]{background-image:none;padding:0}div.testimonial-content.blue p[data-v-2c05e654],div.testimonial-content.green p[data-v-2c05e654]{font-size:15px}}@media only screen and (max-width:500px){div.testimonial-content[data-v-2c05e654]{width:100%;background-size:350px 156px;padding:0 calc(50% - 100px);box-sizing:border-box}div.testimonial-content p[data-v-2c05e654]{font-size:12px}}@media only screen and (min-width:500px){div.testimonial-content[data-v-2c05e654]{height:212px;padding:0 75px;margin:40px auto 0}}@media only screen and (min-width:959px){div.testimonial-content[data-v-2c05e654]{padding:0 calc(25% - 140px)}}.header-anchor[data-v-2c05e654]{display:none}.testimonials[data-v-729b0721]{padding:20px 0}@media only screen and (min-width:959px){.testimonials[data-v-729b0721]{display:flex}}.searchbox{display:inline-block;position:relative;width:200px;height:32px!important;white-space:nowrap;box-sizing:border-box;visibility:visible!important}.searchbox .algolia-autocomplete{display:block;width:100%;height:100%}.searchbox__wrapper{width:100%;height:100%;z-index:999;position:relative}.searchbox__input{display:inline-block;box-sizing:border-box;transition:box-shadow .4s ease,background .4s ease;border:0;border-radius:16px;box-shadow:inset 0 0 0 1px #ccc;background:#fff!important;padding:0 26px 0 32px;width:100%;height:100%;vertical-align:middle;white-space:normal;font-size:12px;-webkit-appearance:none;-moz-appearance:none;appearance:none}.searchbox__input::-webkit-search-cancel-button,.searchbox__input::-webkit-search-decoration,.searchbox__input::-webkit-search-results-button,.searchbox__input::-webkit-search-results-decoration{display:none}.searchbox__input:hover{box-shadow:inset 0 0 0 1px #b3b3b3}.searchbox__input:active,.searchbox__input:focus{outline:0;box-shadow:inset 0 0 0 1px #aaa;background:#fff}.searchbox__input::-moz-placeholder{color:#aaa}.searchbox__input::placeholder{color:#aaa}.searchbox__submit{position:absolute;top:0;margin:0;border:0;border-radius:16px 0 0 16px;background-color:rgba(69,142,225,0);padding:0;width:32px;height:100%;vertical-align:middle;text-align:center;font-size:inherit;-webkit-user-select:none;-moz-user-select:none;user-select:none;right:inherit;left:0}.searchbox__submit:before{display:inline-block;margin-right:-4px;height:100%;vertical-align:middle;content:""}.searchbox__submit:active,.searchbox__submit:hover{cursor:pointer}.searchbox__submit:focus{outline:0}.searchbox__submit svg{width:14px;height:14px;vertical-align:middle;fill:#6d7e96}.searchbox__reset{display:block;position:absolute;top:8px;right:8px;margin:0;border:0;background:none;cursor:pointer;padding:0;font-size:inherit;-webkit-user-select:none;-moz-user-select:none;user-select:none;fill:rgba(0,0,0,.5)}.searchbox__reset.hide{display:none}.searchbox__reset:focus{outline:0}.searchbox__reset svg{display:block;margin:4px;width:8px;height:8px}.searchbox__input:valid~.searchbox__reset{display:block;animation-name:sbx-reset-in;animation-duration:.15s}@keyframes sbx-reset-in{0%{transform:translate3d(-20%,0,0);opacity:0}to{transform:none;opacity:1}}.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu{right:0!important;left:inherit!important}.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu:before{right:48px}.algolia-autocomplete.algolia-autocomplete-left .ds-dropdown-menu{left:0!important;right:inherit!important}.algolia-autocomplete.algolia-autocomplete-left .ds-dropdown-menu:before{left:48px}.algolia-autocomplete .ds-dropdown-menu{top:-6px;border-radius:4px;margin:6px 0 0;padding:0;text-align:left;height:auto;position:relative;background:transparent;border:none;z-index:999;max-width:600px;min-width:500px;box-shadow:0 1px 0 0 rgba(0,0,0,.2),0 2px 3px 0 rgba(0,0,0,.1)}.algolia-autocomplete .ds-dropdown-menu:before{display:block;position:absolute;content:"";width:14px;height:14px;background:#fff;z-index:1000;top:-7px;border-top:1px solid #d9d9d9;border-right:1px solid #d9d9d9;transform:rotate(-45deg);border-radius:2px}.algolia-autocomplete .ds-dropdown-menu .ds-suggestions{position:relative;z-index:1000;margin-top:8px}.algolia-autocomplete .ds-dropdown-menu .ds-suggestions a:hover{text-decoration:none}.algolia-autocomplete .ds-dropdown-menu .ds-suggestion{cursor:pointer}.algolia-autocomplete .ds-dropdown-menu .ds-suggestion.ds-cursor .algolia-docsearch-suggestion.suggestion-layout-simple,.algolia-autocomplete .ds-dropdown-menu .ds-suggestion.ds-cursor .algolia-docsearch-suggestion:not(.suggestion-layout-simple) .algolia-docsearch-suggestion--content{background-color:rgba(69,142,225,.05)}.algolia-autocomplete .ds-dropdown-menu [class^=ds-dataset-]{position:relative;border:1px solid #d9d9d9;background:#fff;border-radius:4px;overflow:auto;padding:0 8px 8px}.algolia-autocomplete .ds-dropdown-menu *{box-sizing:border-box}.algolia-autocomplete .algolia-docsearch-suggestion{display:block;position:relative;padding:0 8px;background:#fff;color:#02060c;overflow:hidden}.algolia-autocomplete .algolia-docsearch-suggestion--highlight{color:#174d8c;background:rgba(143,187,237,.1);padding:.1em .05em}.algolia-autocomplete .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--category-header-lvl0 .algolia-docsearch-suggestion--highlight,.algolia-autocomplete .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--category-header-lvl1 .algolia-docsearch-suggestion--highlight,.algolia-autocomplete .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight{padding:0 0 1px;background:inherit;box-shadow:inset 0 -2px 0 0 rgba(69,142,225,.8);color:inherit}.algolia-autocomplete .algolia-docsearch-suggestion--content{display:block;float:right;width:70%;position:relative;padding:5.33333px 0 5.33333px 10.66667px;cursor:pointer}.algolia-autocomplete .algolia-docsearch-suggestion--content:before{content:"";position:absolute;display:block;top:0;height:100%;width:1px;background:#ddd;left:-1px}.algolia-autocomplete .algolia-docsearch-suggestion--category-header{position:relative;border-bottom:1px solid #ddd;display:none;margin-top:8px;padding:4px 0;font-size:1em;color:#33363d}.algolia-autocomplete .algolia-docsearch-suggestion--wrapper{width:100%;float:left;padding:8px 0 0}.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column{float:left;width:30%;text-align:right;position:relative;padding:5.33333px 10.66667px;color:#a4a7ae;font-size:.9em;word-wrap:break-word}.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column:before{content:"";position:absolute;display:block;top:0;height:100%;width:1px;background:#ddd;right:0}.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-inline{display:none}.algolia-autocomplete .algolia-docsearch-suggestion--title{margin-bottom:4px;color:#02060c;font-size:.9em;font-weight:700}.algolia-autocomplete .algolia-docsearch-suggestion--text{display:block;line-height:1.2em;font-size:.85em;color:#63676d}.algolia-autocomplete .algolia-docsearch-suggestion--no-results{width:100%;padding:8px 0;text-align:center;font-size:1.2em}.algolia-autocomplete .algolia-docsearch-suggestion--no-results:before{display:none}.algolia-autocomplete .algolia-docsearch-suggestion code{padding:1px 5px;font-size:90%;border:none;color:#222;background-color:#ebebeb;border-radius:3px;font-family:Menlo,Monaco,Consolas,Courier New,monospace}.algolia-autocomplete .algolia-docsearch-suggestion code .algolia-docsearch-suggestion--highlight{background:none}.algolia-autocomplete .algolia-docsearch-suggestion.algolia-docsearch-suggestion__main .algolia-docsearch-suggestion--category-header,.algolia-autocomplete .algolia-docsearch-suggestion.algolia-docsearch-suggestion__secondary{display:block}@media (min-width:768px){.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column{display:block}}@media (max-width:768px){.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column{display:inline-block;width:auto;float:left;padding:0;color:#02060c;font-size:.9em;font-weight:700;text-align:left;opacity:.5}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column:before{display:none}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column:after{content:"|"}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--content{display:inline-block;width:auto;text-align:left;float:left;padding:0}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--content:before{display:none}}.algolia-autocomplete .suggestion-layout-simple.algolia-docsearch-suggestion{border-bottom:1px solid #eee;padding:8px;margin:0}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--content{width:100%;padding:0}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--content:before{display:none}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header{margin:0;padding:0;display:block;width:100%;border:none}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header-lvl0,.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header-lvl1{opacity:.6;font-size:.85em}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header-lvl1:before{background-image:url('data:image/svg+xml;utf8,');content:"";width:10px;height:10px;display:inline-block}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--wrapper{width:100%;float:left;margin:0;padding:0}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--duplicate-content,.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--subcategory-inline{display:none!important}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--title{margin:0;color:#458ee1;font-size:.9em;font-weight:400}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--title:before{content:"#";font-weight:700;color:#458ee1;display:inline-block}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--text{margin:4px 0 0;display:block;line-height:1.4em;padding:5.33333px 8px;background:#f8f8f8;font-size:.85em;opacity:.8}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight{color:#3f4145;font-weight:700;box-shadow:none}.algolia-autocomplete .algolia-docsearch-footer{width:134px;height:20px;z-index:2000;margin-top:10.66667px;float:right;font-size:0;line-height:0}.algolia-autocomplete .algolia-docsearch-footer--logo{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='168' height='24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath d='M78.988.938h16.594a2.968 2.968 0 012.966 2.966V20.5a2.967 2.967 0 01-2.966 2.964H78.988a2.967 2.967 0 01-2.966-2.964V3.897A2.961 2.961 0 0178.988.938zm41.937 17.866c-4.386.02-4.386-3.54-4.386-4.106l-.007-13.336 2.675-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-10.846-2.18c.821 0 1.43-.047 1.855-.129v-2.719a6.334 6.334 0 00-1.574-.199 5.7 5.7 0 00-.897.069 2.699 2.699 0 00-.814.24c-.24.116-.439.28-.582.491-.15.212-.219.335-.219.656 0 .628.219.991.616 1.23s.938.362 1.615.362zm-.233-9.7c.883 0 1.629.109 2.231.328.602.218 1.088.525 1.444.915.363.396.609.922.76 1.483.157.56.232 1.175.232 1.85v6.874a32.5 32.5 0 01-1.868.314c-.834.123-1.772.185-2.813.185-.69 0-1.327-.069-1.895-.198a4.001 4.001 0 01-1.471-.636 3.085 3.085 0 01-.951-1.134c-.226-.465-.343-1.12-.343-1.803 0-.656.13-1.073.384-1.525a3.24 3.24 0 011.047-1.106c.445-.287.95-.492 1.532-.615a8.8 8.8 0 011.82-.185 8.404 8.404 0 011.972.24v-.438c0-.307-.035-.6-.11-.874a1.88 1.88 0 00-.384-.73 1.784 1.784 0 00-.724-.493 3.164 3.164 0 00-1.143-.205c-.616 0-1.177.075-1.69.164a7.735 7.735 0 00-1.26.307l-.321-2.192c.335-.117.834-.233 1.478-.349a10.98 10.98 0 012.073-.178zm52.842 9.626c.822 0 1.43-.048 1.854-.13V13.7a6.347 6.347 0 00-1.574-.199c-.294 0-.595.021-.896.069a2.7 2.7 0 00-.814.24 1.46 1.46 0 00-.582.491c-.15.212-.218.335-.218.656 0 .628.218.991.615 1.23.404.245.938.362 1.615.362zm-.226-9.694c.883 0 1.629.108 2.231.327.602.219 1.088.526 1.444.915.355.39.609.923.759 1.483a6.8 6.8 0 01.233 1.852v6.873c-.41.088-1.034.19-1.868.314-.834.123-1.772.184-2.813.184-.69 0-1.327-.068-1.895-.198a4.001 4.001 0 01-1.471-.635 3.085 3.085 0 01-.951-1.134c-.226-.465-.343-1.12-.343-1.804 0-.656.13-1.073.384-1.524.26-.45.608-.82 1.047-1.107.445-.286.95-.491 1.532-.614a8.803 8.803 0 012.751-.13c.329.034.671.096 1.04.185v-.437a3.3 3.3 0 00-.109-.875 1.873 1.873 0 00-.384-.731 1.784 1.784 0 00-.724-.492 3.165 3.165 0 00-1.143-.205c-.616 0-1.177.075-1.69.164a7.75 7.75 0 00-1.26.307l-.321-2.193c.335-.116.834-.232 1.478-.348a11.633 11.633 0 012.073-.177zm-8.034-1.271a1.626 1.626 0 01-1.628-1.62c0-.895.725-1.62 1.628-1.62.904 0 1.63.725 1.63 1.62 0 .895-.733 1.62-1.63 1.62zm1.348 13.22h-2.689V7.27l2.69-.423v11.956zm-4.714 0c-4.386.02-4.386-3.54-4.386-4.107l-.008-13.336 2.676-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-8.698-5.903c0-1.156-.253-2.119-.746-2.788-.493-.677-1.183-1.01-2.067-1.01-.882 0-1.574.333-2.065 1.01-.493.676-.733 1.632-.733 2.788 0 1.168.246 1.953.74 2.63.492.683 1.183 1.018 2.066 1.018.882 0 1.574-.342 2.067-1.019.492-.683.738-1.46.738-2.63zm2.737-.007c0 .902-.13 1.584-.397 2.33a5.52 5.52 0 01-1.128 1.906 4.986 4.986 0 01-1.752 1.223c-.685.286-1.739.45-2.265.45-.528-.006-1.574-.157-2.252-.45a5.096 5.096 0 01-1.744-1.223c-.487-.527-.863-1.162-1.137-1.906a6.345 6.345 0 01-.41-2.33c0-.902.123-1.77.397-2.508a5.554 5.554 0 011.15-1.892 5.133 5.133 0 011.75-1.216c.679-.287 1.425-.423 2.232-.423.808 0 1.553.142 2.237.423a4.88 4.88 0 011.753 1.216 5.644 5.644 0 011.135 1.892c.287.738.431 1.606.431 2.508zm-20.138 0c0 1.12.246 2.363.738 2.882.493.52 1.13.78 1.91.78.424 0 .828-.062 1.204-.178.377-.116.677-.253.917-.417V9.33a10.476 10.476 0 00-1.766-.226c-.971-.028-1.71.37-2.23 1.004-.513.636-.773 1.75-.773 2.788zm7.438 5.274c0 1.824-.466 3.156-1.404 4.004-.936.846-2.367 1.27-4.296 1.27-.705 0-2.17-.137-3.34-.396l.431-2.118c.98.205 2.272.26 2.95.26 1.074 0 1.84-.219 2.299-.656.459-.437.684-1.086.684-1.948v-.437a8.07 8.07 0 01-1.047.397c-.43.13-.93.198-1.492.198-.739 0-1.41-.116-2.018-.349a4.206 4.206 0 01-1.567-1.025c-.431-.45-.774-1.017-1.013-1.694-.24-.677-.363-1.885-.363-2.773 0-.834.13-1.88.384-2.577.26-.696.629-1.298 1.129-1.796.493-.498 1.095-.881 1.8-1.162a6.605 6.605 0 012.428-.457c.87 0 1.67.109 2.45.24.78.129 1.444.265 1.985.415V18.17z' fill='%235468FF'/%3E%3Cpath d='M6.972 6.677v1.627c-.712-.446-1.52-.67-2.425-.67-.585 0-1.045.13-1.38.391a1.24 1.24 0 00-.502 1.03c0 .425.164.765.494 1.02.33.256.835.532 1.516.83.447.192.795.356 1.045.495.25.138.537.332.862.582.324.25.563.548.718.894.154.345.23.741.23 1.188 0 .947-.334 1.691-1.004 2.234-.67.542-1.537.814-2.601.814-1.18 0-2.16-.229-2.936-.686v-1.708c.84.628 1.814.942 2.92.942.585 0 1.048-.136 1.388-.407.34-.271.51-.646.51-1.125 0-.287-.1-.55-.302-.79-.203-.24-.42-.42-.655-.542-.234-.123-.585-.29-1.053-.503a61.27 61.27 0 01-.582-.271 13.67 13.67 0 01-.55-.287 4.275 4.275 0 01-.567-.351 6.92 6.92 0 01-.455-.4c-.18-.17-.31-.34-.39-.51-.08-.17-.155-.37-.224-.598a2.553 2.553 0 01-.104-.742c0-.915.333-1.638.998-2.17.664-.532 1.523-.798 2.576-.798.968 0 1.793.17 2.473.51zm7.468 5.696v-.287c-.022-.607-.187-1.088-.495-1.444-.309-.357-.75-.535-1.324-.535-.532 0-.99.194-1.373.583-.382.388-.622.949-.717 1.683h3.909zm1.005 2.792v1.404c-.596.34-1.383.51-2.362.51-1.255 0-2.255-.377-3-1.132-.744-.755-1.116-1.744-1.116-2.968 0-1.297.34-2.316 1.021-3.055.68-.74 1.548-1.11 2.6-1.11 1.033 0 1.852.323 2.458.966.606.644.91 1.572.91 2.784 0 .33-.033.676-.096 1.038h-5.314c.107.702.405 1.239.894 1.611.49.372 1.106.558 1.85.558.862 0 1.58-.202 2.155-.606zm6.605-1.77h-1.212c-.596 0-1.045.116-1.349.35-.303.234-.454.532-.454.894 0 .372.117.664.35.877.235.213.575.32 1.022.32.51 0 .912-.142 1.204-.424.293-.281.44-.651.44-1.108v-.91zm-4.068-2.554V9.325c.627-.361 1.457-.542 2.489-.542 2.116 0 3.175 1.026 3.175 3.08V17h-1.548v-.957c-.415.68-1.143 1.02-2.186 1.02-.766 0-1.38-.22-1.843-.661-.462-.442-.694-1.003-.694-1.684 0-.776.293-1.38.878-1.81.585-.431 1.404-.647 2.457-.647h1.34V11.8c0-.554-.133-.971-.399-1.253-.266-.282-.707-.423-1.324-.423a4.07 4.07 0 00-2.345.718zm9.333-1.93v1.42c.394-1 1.101-1.5 2.123-1.5.148 0 .313.016.494.048v1.531a1.885 1.885 0 00-.75-.143c-.542 0-.989.24-1.34.718-.351.479-.527 1.048-.527 1.707V17h-1.563V8.91h1.563zm5.01 4.084c.022.82.272 1.492.75 2.019.479.526 1.15.79 2.01.79.639 0 1.235-.176 1.788-.527v1.404c-.521.319-1.186.479-1.995.479-1.265 0-2.276-.4-3.031-1.197-.755-.798-1.133-1.792-1.133-2.984 0-1.16.38-2.151 1.14-2.975.761-.825 1.79-1.237 3.088-1.237.702 0 1.346.149 1.93.447v1.436a3.242 3.242 0 00-1.77-.495c-.84 0-1.513.266-2.019.798-.505.532-.758 1.213-.758 2.042zM40.24 5.72v4.579c.458-1 1.293-1.5 2.505-1.5.787 0 1.42.245 1.899.734.479.49.718 1.17.718 2.042V17h-1.564v-5.106c0-.553-.14-.98-.422-1.284-.282-.303-.652-.455-1.11-.455-.531 0-1.002.202-1.411.606-.41.405-.615 1.022-.615 1.851V17h-1.563V5.72h1.563zm14.966 10.02c.596 0 1.096-.253 1.5-.758.404-.506.606-1.157.606-1.955 0-.915-.202-1.62-.606-2.114-.404-.495-.92-.742-1.548-.742-.553 0-1.05.224-1.491.67-.442.447-.662 1.133-.662 2.058 0 .958.212 1.67.638 2.138.425.469.946.703 1.563.703zM53.004 5.72v4.42c.574-.894 1.388-1.341 2.44-1.341 1.022 0 1.857.383 2.506 1.149.649.766.973 1.781.973 3.047 0 1.138-.309 2.109-.925 2.912-.617.803-1.463 1.205-2.537 1.205-1.075 0-1.894-.447-2.457-1.34V17h-1.58V5.72h1.58zm9.908 11.104l-3.223-7.913h1.739l1.005 2.632 1.26 3.415c.096-.32.48-1.458 1.15-3.415l.909-2.632h1.66l-2.92 7.866c-.777 2.074-1.963 3.11-3.559 3.11a2.92 2.92 0 01-.734-.079v-1.34c.17.042.351.064.543.064 1.032 0 1.755-.57 2.17-1.708z' fill='%235D6494'/%3E%3Cpath d='M89.632 5.967v-.772a.978.978 0 00-.978-.977h-2.28a.978.978 0 00-.978.977v.793c0 .088.082.15.171.13a7.127 7.127 0 011.984-.28c.65 0 1.295.088 1.917.259.082.02.164-.04.164-.13m-6.248 1.01l-.39-.389a.977.977 0 00-1.382 0l-.465.465a.973.973 0 000 1.38l.383.383c.062.061.15.047.205-.014.226-.307.472-.601.746-.874.281-.28.568-.526.883-.751.068-.042.075-.137.02-.2m4.16 2.453v3.341c0 .096.104.165.192.117l2.97-1.537c.068-.034.089-.117.055-.184a3.695 3.695 0 00-3.08-1.866c-.068 0-.136.054-.136.13m0 8.048a4.489 4.489 0 01-4.49-4.482 4.488 4.488 0 014.49-4.482 4.488 4.488 0 014.489 4.482 4.484 4.484 0 01-4.49 4.482m0-10.85a6.363 6.363 0 100 12.729 6.37 6.37 0 006.372-6.368 6.358 6.358 0 00-6.371-6.36' fill='%23FFF'/%3E%3C/g%3E%3C/svg%3E");background-repeat:no-repeat;background-position:50%;background-size:100%;overflow:hidden;text-indent:-9000px;padding:0!important;width:100%;height:100%;display:block}.dropdown-wrapper{cursor:pointer}.dropdown-wrapper .dropdown-title,.dropdown-wrapper .mobile-dropdown-title{display:block;font-size:.9rem;font-family:inherit;cursor:inherit;padding:inherit;line-height:1.4rem;background:transparent;border:none;font-weight:500;color:#292828}.dropdown-wrapper .dropdown-title:hover,.dropdown-wrapper .mobile-dropdown-title:hover{border-color:transparent}.dropdown-wrapper .dropdown-title .arrow,.dropdown-wrapper .mobile-dropdown-title .arrow{vertical-align:middle;margin-top:-1px;margin-left:.4rem}.dropdown-wrapper .mobile-dropdown-title{display:none;font-weight:600}.dropdown-wrapper .mobile-dropdown-title font-size inherit:hover{color:#07aab4}.dropdown-wrapper .nav-dropdown .dropdown-item{color:inherit;line-height:1.7rem}.dropdown-wrapper .nav-dropdown .dropdown-item h4{margin:.45rem 0 0;border-top:1px solid #eee;padding:1rem 1.5rem .45rem 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper{padding:0;list-style:none}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper .dropdown-subitem{font-size:.9em}.dropdown-wrapper .nav-dropdown .dropdown-item a{display:block;line-height:1.7rem;position:relative;border-bottom:none;font-weight:400;margin-bottom:0;padding:0 1.5rem 0 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active,.dropdown-wrapper .nav-dropdown .dropdown-item a:hover{color:#07aab4}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{content:"";width:0;height:0;border-left:5px solid #07aab4;border-top:3px solid transparent;border-bottom:3px solid transparent;position:absolute;top:calc(50% - 2px);left:9px}.dropdown-wrapper .nav-dropdown .dropdown-item:first-child h4{margin-top:0;padding-top:0;border-top:0}@media (max-width:719px){.dropdown-wrapper.open .dropdown-title{margin-bottom:.5rem}.dropdown-wrapper .dropdown-title{display:none}.dropdown-wrapper .mobile-dropdown-title{display:block}.dropdown-wrapper .nav-dropdown{transition:height .1s ease-out;overflow:hidden}.dropdown-wrapper .nav-dropdown .dropdown-item h4{border-top:0;margin-top:0;padding-top:0}.dropdown-wrapper .nav-dropdown .dropdown-item>a,.dropdown-wrapper .nav-dropdown .dropdown-item h4{font-size:15px;line-height:2rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem{font-size:14px;padding-left:1rem}}@media (min-width:719px){.dropdown-wrapper{height:1.8rem}.dropdown-wrapper.open .nav-dropdown,.dropdown-wrapper:hover .nav-dropdown{display:block!important}.dropdown-wrapper.open:blur{display:none}.dropdown-wrapper .nav-dropdown{display:none;height:auto!important;box-sizing:border-box;max-height:calc(100vh - 2.7rem);overflow-y:auto;position:absolute;top:100%;right:0;background-color:#fff;padding:.6rem 0;border:1px solid;border-color:#ddd #ddd #ccc;text-align:left;border-radius:.25rem;white-space:nowrap;margin:0}}.nav-links{display:inline-block}.nav-links a{line-height:1.4rem;color:inherit}.nav-links a.router-link-active,.nav-links a:hover{color:#07aab4}.nav-links .nav-item{position:relative;display:inline-block;margin-left:1.5rem;line-height:2rem}.nav-links .nav-item:first-child{margin-left:0}.nav-links .repo-link{margin-left:1.5rem}@media (max-width:719px){.nav-links .nav-item,.nav-links .repo-link{margin-left:0}}@media (min-width:719px){.nav-links a.router-link-active,.nav-links a:hover{color:#292828}.nav-item>a:not(.external).router-link-active,.nav-item>a:not(.external):hover{margin-bottom:-2px;border-bottom:2px solid #08c1cd}}.navbar{padding:.7rem 1.5rem;line-height:2.2rem}.navbar a,.navbar img,.navbar span{display:inline-block}.navbar .logo{height:2.2rem;min-width:2.2rem;margin-right:.8rem;vertical-align:top}.navbar .site-name{font-size:1.3rem;font-weight:600;color:#292828;position:relative}.navbar .links{padding-left:1.5rem;box-sizing:border-box;background-color:#fff;white-space:nowrap;font-size:.9rem;position:absolute;right:1.5rem;top:.7rem;display:flex}.navbar .links .search-box{flex:0 0 auto;vertical-align:top}@media (max-width:719px){.navbar{padding-left:4rem}.navbar .can-hide{display:none}.navbar .links{padding-left:1.5rem}.navbar .site-name{width:calc(100vw - 9.4rem);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}}.page-edit{max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.page-edit{padding:2rem}}@media (max-width:480px){.page-edit{padding:1.5rem}}.page-edit{padding-top:1rem;padding-bottom:1rem;overflow:auto}.page-edit .edit-link{display:inline-block}.page-edit .edit-link a{color:#5f5d5d;margin-right:.25rem}.page-edit .last-updated{float:right;font-size:.9em}.page-edit .last-updated .prefix{font-weight:500;color:#5f5d5d}.page-edit .last-updated .time{font-weight:400;color:#767676}@media (max-width:719px){.page-edit .edit-link{margin-bottom:.5rem}.page-edit .last-updated{font-size:.8em;float:none;text-align:left}}.page-nav{max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.page-nav{padding:2rem}}@media (max-width:480px){.page-nav{padding:1.5rem}}.page-nav{padding-top:1rem;padding-bottom:0}.page-nav .inner{min-height:2rem;margin-top:0;border-top:1px solid #eaecef;padding-top:1rem;overflow:auto}.page-nav .next{float:right}.page,.page[data-v-22624a70]{padding-bottom:2rem;display:block}.sidebar-group .sidebar-group{padding-left:.5em}.sidebar-group:not(.collapsable) .sidebar-heading:not(.clickable){cursor:auto;color:inherit}.sidebar-group.is-sub-group{padding-left:0}.sidebar-group.is-sub-group>.sidebar-heading{font-size:.95em;line-height:1.4;font-weight:400;padding-left:2rem}.sidebar-group.is-sub-group>.sidebar-heading:not(.clickable){opacity:.5}.sidebar-group.is-sub-group>.sidebar-group-items{padding-left:1rem}.sidebar-group.is-sub-group>.sidebar-group-items>li>.sidebar-link{font-size:.95em;border-left:none}.sidebar-group.depth-2>.sidebar-heading{border-left:none}.sidebar-heading{color:#292828;transition:color .15s ease;cursor:pointer;font-size:1.1em;font-weight:700;padding:.35rem 1.5rem .35rem 1.25rem;width:100%;box-sizing:border-box;margin:0;border-left:.25rem solid transparent}.sidebar-heading.open,.sidebar-heading:hover{color:inherit}.sidebar-heading .arrow{position:relative;top:-.12em;left:.5em}.sidebar-heading.clickable.active{font-weight:600;color:#07aab4;border-left-color:#07aab4}.sidebar-heading.clickable:hover{color:#07aab4}.sidebar-group-items{transition:height .1s ease-out;font-size:.95em;overflow:hidden}.sidebar .sidebar-sub-headers{padding-left:1rem;font-size:.95em}a.sidebar-link{font-size:1em;font-weight:400;display:inline-block;color:#292828;border-left:.25rem solid transparent;padding:.35rem 1rem .35rem 1.25rem;line-height:1.4;width:100%;box-sizing:border-box}a.sidebar-link:hover{color:#07aab4}a.sidebar-link.active{font-weight:600;color:#07aab4;border-left-color:#07aab4}.sidebar-group a.sidebar-link{padding-left:2rem}.sidebar-sub-headers a.sidebar-link{padding-top:.25rem;padding-bottom:.25rem;border-left:none}.sidebar-sub-headers a.sidebar-link.active{font-weight:500}.sidebar ul{padding:0;margin:0;list-style-type:none}.sidebar a{display:inline-block}.sidebar .nav-links{display:none;border-bottom:1px solid #eaecef;padding:.5rem 0 .75rem}.sidebar .nav-links a{font-weight:600}.sidebar .nav-links .nav-item,.sidebar .nav-links .repo-link{display:block;line-height:1.25rem;font-size:1.1em;padding:.5rem 0 .5rem 1.5rem}.sidebar>.sidebar-links{padding:1.5rem 0}.sidebar>.sidebar-links>li>a.sidebar-link{font-size:1.1em;line-height:1.7;font-weight:700}.sidebar>.sidebar-links>li:not(:first-child){margin-top:.75rem}@media (max-width:719px){.sidebar .nav-links{display:block}.sidebar .nav-links .dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{top:calc(1rem - 2px)}.sidebar>.sidebar-links{padding:1rem 0}} \ No newline at end of file diff --git a/assets/img/contributors.9bc93581.jpg b/assets/img/contributors.9bc93581.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e1398707eb445138a1ee8ef300abd752f7417f73 GIT binary patch literal 245926 zcmbrlbyOV9+C4hB27H;O4DRj@!5uI3zSI{KwCT_=LoywQ&!M;s-{ZB~$is=7Y zKtcbXBKn_z{wJP~6#z061o(wPp#g*d&kX6mf58S&AY)=10|?{2l^mD$I5vO2V@_x7 z=BR?KQYziHMkk9UNvh~UW7AhPQFrzj!ltuKsGk}NgKb znw%T@otz!wC^Z*)RhU?tBgLls>>P!L$*u>9qp#pE=Nf8<(BH@25(CND;g}Q%7A6=1EUi-n{&&1^kfaW-r@? zXW&|jrdi_n7m!d2Pmh4c7YAX|E3dgW!5K#>o;k8rvn$su2?@vxB+JQ>4f!YBY(a5z zQWV~-##wmghzFL$Htj<(tL@WLVBf5bhQxOhQ)8IJwbWsb2KoV}5%~|mVqDa5t38%| z+U>kwp`RZnKoLS12Jo)~iQ&m}BEDM5ie2-QchGAvHB~oDk&If=D8?PtnehkUkA2|> zV0Q5BLlH%FE7{t}}USz*U>=xOXXb-m>xou!( z^fk8?XE>JkO&0XJ-3)U6)?~9Aly|&Edz_I!bE{*0=hj~T09f+J6;@ew>UIgLIpvzn z<`xN1jDQA7wyc=)x?a9hTdyXW8^RGTU}(_%wX8O8y`G~d3|NhH7-Qwx+PyCk)xACV zQt@rykI#T^b!mAZVDwgMJUcj-mEYXKs(QB%3qLZHomUxu$%TD9B7W=xcf;rkP11o8*)cO3qs`1#s@70A-K%pcX z+LlChZMO<-@CGoi{aB(EN8GZ6Fu8KxF_gk<0w4NfV$KoMsiTZgb`K{WS!WbclI1C ze^s-0V#9Kc4SE@WiC0;gg4^IIgJi+oo0=l*{^6rxU)(MN`SSu!5d}-I}6g~8lF1My;hckKuQ_f&s||Jo92Nb;rk+Wx)K3-0T7@S@cRpvx+7)T4bM zS&%53PcO%^%XM>~`il8)YH+`^M$K7Ld^@kD(ObphH>c0927z{tlxe2aaC|MVwf&C1 z=JnoL9{~0IhI&3dxB)M!Zr;_^_8y0&C5o3y1$+C2CXi6lisc_oVlxjmJKJw#RX25+ zXoDXB?M~cbX+2_}1o^Q%N5Oe+lcx{B{qb4`VRg65H{j*@2VkMnnlD`(--dKIa}lkU zopC4^*1&oJ-%IN6qJwa4^ki$8s@HB6z;UId9|@)n^ob0+1;z1T^akQiWtb!hAX(-k z**3$_-{0rvj&^r5#oBeL(BXLB4{+H)zc!1BxO-@+-NdYor40IRC+eU2H}_NidTTEH zUzQ048NjW?qKd-Y2GRiRj9BXaMR;3tbEn5ia3V9 uX9tu#Thg|l?&JY~XaxX}q4 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�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�qR7(4fw`+P%GF@Sc!nkj|98HFi_8UO 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
6s>1`kiiP_JsJ{2w>wai6qxYrH>|yU(o?LN0 z5|*h^+Y{gqqp*hAe^ahrJ;J3tILfYC{YC=#E99>RyZh+R)z#hZk`Uj3g~vy_EGi2# zJMF8>)c9~^#8#O_7^GL>v+g#YWXz*vkP`MR;XW? z@nqcFhJ9tO?gXminXY<*4se**M6T`%xS1LAl31!H#2<_@bR8lH_d_@YR)}2VdUKO_ zbmK%(UYNMD@-l^(B-AYO@6lZG$x@EP2bbflfJDic(1^2hR@Q{;vjQuP2`Zs}>Gf}F(B~mmc?|cf zjEJ*kD_TF^=gLJ?8PYjDjM*x5n}{Wc^}`rdxTLvz-p=@W>Kib0MaTY;yU{qMs>j)R znt)bL#`#7*1a8{jh6X`tuM5sWq3$?N0;?dRhm3F83?hhVKa! z2wJ9}U4CdmzJ3l-{jko)*_7=fH?2ZDUvplyps^BW_2EMJI#+2XF#)uz?7WN@GmRv) zOX(%(aXE>9n)RZJnO)!+EV~FlDAOHuIYKU)vdowhe&jGmOR4zH_YORj--|-^Z zha)n4U)`b&X)c}l{TaBFuoH2HmbyvN6b4%rk@_dAT`eJ}ZOp49 zmkR9MM!woRHa_?kO#mvJf^aBW9}$$ynVb?j6V5sJ%(z3-*6}-la^fo{`p5o(0EQnd zl}E9>IXsagwd7G#e8Mx9%E0+!51Cllnmi9} z6Jcrngp?wP2+2UZS!PLj%2p_Gwd`=C9?UlzoCGXWO$L

*q@Nvd`MO+VLnTX*We` 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%0Dk9X(QrZ_m+jX0JWEQQ?jC z6yw9lZ4nHyp`hrXn)Px+o=*%I1urm{d%jp8b|Eltm~$XdT9I9Hq?{`EOHeAj4GP6c zLMF5r7lpjgzCrm|8iNdikM!!ApXW3Clgzd8p{d(AVE&m+2wRxk(4AZ7$t|Q}Hz5h$ zSBZrb34mO15ahR93*EF19jo6DjHZ00A$*Xy5=#6s#srW1P`0MEz1GD(xt%IjiMy0- zzFXqu&3^w%(*`3;&i~zPSAoy`v7+t!DUg4+v!@;4(bspg3dME=^B1(7JAs8EcZ&70 zZ}xlKE_(lP;h_e>gI*CSpDx!65J8WCZ(i?_>3B#cfqz*ciAQ;Ri@rk=a3|tbIN9Hb znMdHJ%Up?Zfjp8YXLk>GDu1BG5Bl`CJdD2fRu|^w`4dG2_yppNC1vhKD!O`JbT&H= z5(x8VXY2v<@#!wdeI{GuiC-yzDlq;jz2BB~hqh*#{0)$Agdy^0@kew{w?Gg>EzJN? zu(Jl9ifNpbx-r6KWASZ8vG|n)7qx5Qgg}aESd}lscklA`w&9xhgi`6dYdwW=B5dsb zMFN217lz)v588rD9d$2q$(z6MuBcv1B*RpPXcTN%?YoUx3Y~T2olN&#rU2YhBk~W54 z($#$>JQR(d#5L7}!PAt-zT{dDOM!zD?+aTU6xu4mMy965f99kj-y)`~yXc}@Sea{wMv$NAkZI?UO%$XFEMNvs;e5@yIaUcwE;Hg|swM-AIJ53+i=Xx^Qh+eM7w4n9H=}Q4As@_xp z-s-zE;X#^1;pp5~wEIB0cB0OZx~GA*i0@e^7ZcRnG8kgU{y-$QeUj5L284CJ$dax@ zNy+=UF}-cosJwbMXz{P>L>46iRy%!fs zYUc9B`o{Zg{1>SWI6OEWJ~L za93~4!J?A#Zo^tB;JONl3rMxwYm^soDeNiqo^m=aZjRA9PHvk2a@uQzR6+%^IFV>e z%_X&-(OJk4PdcK686=zf^Uh@Hz<$Z9c1?54DwxWRhn-t5gI!Oh=Kfo0@p7ZF zf+p(N(t+_Li>5+Z@_!TgE+Zyg9Kx6|^8Nu#GxR>le4G6_5)t6QzYLxeO0X3Yz4`}O z=Ug5wA~PO$gvZphASitSwT70T(zG<&{t+RTp)k%Z9ukVlIRM6ai@?5T5JSi2sCyHZRI;n5OwNV%H5iYjYeV093wsK43#1{Mq zUuqd}*u9tKQ`>5>2fNUKxKnBg6mr+IFOp?)1w?K2CT$gunYB38V?;x!<)JIV$}xUK zn^w!oUeVcx!X)~AhmITCBdTa-?QskmDI_+oj=?mO#zMgi-du^ityYGib6H=VCIZER z8Uig13!`F}daFwUO{L51by1|e-c$^{M*^w8 zmY`cz`zh#JOc*3-UTH~g{zUTQ1d%OH(8i7P>T=~8uiqu$N|44_||`~$q{M<^~LEVNg1&MzN54_az# z4w1A-w!y31(n*goL2`r>x;3BDixS_S>m1zFf{qO5#5A@VK|LSY;~b-X88WGlxPR=? zw8Y83)oUAI7JV&j`Tb+JzK$n4K}~?NUz-fEDv3VimB9K69<_K+uKzkQUw4}z%CL(knZMk^)n(voy28dfG7q(s9ZPpI;S+#FBI zRp9N$U;cfwmab|bUc*(=*T9KJ}M zoO$nR=7m=8vi0tmzsw4yl#~&L$Ah1u{ycX~X@5(O&WjKYHztzdZ>^WKBagMeE`N^znDZ1>uL7zjW0>F0CghS)KTOx99yanm zTS{pg@L+_gebnYkgVE=Qj}qGxl3JG`ul$xsg{$z5C%rXu?|qzU>t(LoY?xHZ)Un(A zD*^QQ{3bE(*OiN_{UhKpDShRXi{6iYe)|V{pP*G2gdZ}qNoaw~4!r#!HNB~?VMI@$ zlQ98xIkuI!KpFw-rN|SAl=#k^E7M0pLZRUhmff$Wb8L7l8g2y+)zWUwB>wEtEx9Ec zYV3A2sp6WF=SiGeC@X*4S`y-GU46>FM;1^EN&lJoYSuMAccfb~tQh{8PV&&X>U}}} z@Etb;Wk@lQr`%MtJ+{uG_-sP{es(h=1KblgW?`G{Wy;18XAUkVDL#FeN2tE^&9j0P z8}(iC_5sW!a3IULQbKYG2o=Vgts^^T(IX1zf@a+u2qm_g#x~`5NQUAXnF$DCejl5g zfY3c?rE^ttAO^M~mm7fiYTFXI{w0=A!!FW$nF{1T4vKWS zt4t{}4z7_sFIn_pK=1U9szXgdi{-v+m)MNnRrf*XiXfsCYK}ivRyL4ehnexayL=7W8IQ!|k}M+`a;mOv=ogTEiNAA`I7OVkym3 ze&;hiPyZNz9h3LdSNX_NPN&+YSRzeYU;?2&{HWi85s7X`=$z6`m0sm4PIAAJfoNUj zu_bQKe!{rr7prt9^W-%Hh0f~HpZ4DO4Rguw7Ndk8+|W}n>rx!Z=x+{00CbBE>()V24iu&m??{(`{MK>tM zL-8NL(T|?_?;wBiKR{DwBEF#snTp?v{&2*f8eA3Hzy84b&*?R2M1VfnS}JqJ=B-8;QFAAm043XoFVAsV8ojt19`ydFXiYlo;!JD=cP-gyYoOts?z{IAK z@E#$-5VvAxe zxZ$L#7W;RuUt-bq{59SM-e>szFwZ;9ci8<4l8i%bK%Jf1^015KHHAd z2pZYR;ajmk`qlV6lm)h;^e<-!W))ZmA5HcYkG9+=Kk=@sIq0!f|CXPp@MEaQ3Z9t{6cTczq)N#$oBZX9h)7b zczu(T;EU|fY@tUD8;_@NNZwkEU9@}cFzeOMhJUy)WhT8jvqm$O z7w)?&DX~_a2eSzY80UKEF6_q|V@*feL(Hl?4qe2rXw*6bTM}kCJ=NFnw?d!TRE1ax zQ&qul?JN;Ssvix%s&O1K)#aA0?ZTgGE92CYiI;f}`@Ap1Ap?Ee;2&xNVn*g;wskUo z-ytFWo*^M^+pGT)tJ$6Uh}W60Orjo_Q@D$(nJJ zCwJ&f}C9{e59QM%6q4@C?3JcodFzdG=o)B1LPq@;VqVUD8%s^|;9*lF2V<3#H6 zd6a)myM%{cLa3-9j*YPEers=L>O9}GO{D~r_6?}F6ndeld!^VUn)tZw%M!SYlr5uu6~0_`W^`NT?-u1 z5Q;5An7^uc)JI2Vcg)RAYv|%hEY#qQZ^=6@bIvlN<)C||!}^MtwaE?Kt6oL)Zzuh< z9(B0;y&Ei_F;e^Iv%L=#fOK2>4=8?Jz?-VPVYn{!3PkJu#U1?m&HDAQC>0)zu=lgG z%O&y3oIn9+xcT+rZR3lJ(4cx&`29rAaOck#zrhEx$G(%oRip|O{+~s=oG@q`Y3kF; z_Cgoz?apP_lnz>_!pKyaH@|W+n|XAq)Dtzt{u^{%XU?z&sn`kOlQUtJD5j=i313LR zIN6-5VAchOKL?0`3L;~%lknV^Dzeu`0NyGXQuE{k&Nk8J6Xc$q}a9=q$2r`H)?%K}&Po5)^o8A*y*Ytk7)C2AG z4Wrm9x-h3C|133~sPI5Gamc;D5Ycqf&fvC-d`Jg=>wTChB6re@cPKJy;#{n7B`ktHn3u zLt!eOVgdS-IzPh9lXLktuQj#pNe&&oy_x%X%YjJ}v31}VvB5|Pwt%o;IyxU%Zx-Lw ztyR!yX<-7oW^q{~P8E5h{K}czwD|Z%SU}wBJ+{?9fU~bkd60=my?6E1zWyc)ddec; z^#YEl*IUzpSCj;FuwK?j-NOBe^Z^)a7{}rU@DI_fUKR(`Lp>z&zf|@;NXSb+CL~5@ zOKCU&oCylqC;SOZS?G=sb8f4I@bjl;B{tdiV#I@X9g5qMjQ!t&S8KIN#!I#{fO1s6 zv$v_hi{;9Hfcc_hE%Ahf^f>mqi7@qfw-MxsyjsZt3&tNIuMdhZ)~3?SH6E>G5ypk? zzZL4A%nA^g0SGLJwzrBe9+ft7Hmo%4)KwFk2)JlLB)b@lpe zX0GMsJV)u_s^&k3m5osB(+LvYkIj6&r87|*M0Ep@0)z(U119P{hX*JuN(wb}t&*oS z4=)7zW{OaV(2{s2$o(smP7Ir;{Qfq>{9XWGJI@1NIr(8{f@%Fxws8#SiChCZ{sB6G_fr#Oo5SO7D$vU7vIm=b0Sn+;iPI{i(O>(cz){5V7 zQ>JO^)0GMeMI5i%cN?&OPrHsjWn>Y#C32MhBHT={<=+;awR(hw?zbYUdvKY0!dv+H zuRlNGE9t$y0!+3s!Y~nPOf}qRck~BT^?8EC8Hk7&4c1)G*<#cc14>oMf4OhmTITJb zJ8Wr)W?Q39iTOFWpl%YIUTnCGgcj{-Y2ms_JEY){nJj=ev87rSNf`$fzNk2>@IcdZ z9U|hH1tKQVKqPT0jMI3u5;(y%R3V!8(YMPM^W7Jgk6P(6yMu9jRmBh01BKJFpf7o% z=&Spn+9a6SZRAh5*w;rp)#S8r`WI zLyT~WCfRS2y`7y2lB2(3&`&Zq?oL%)pb3=iV~~G8d;ue0kV-zfZ<(?gk* z9ryi{8H(n)egHp$nio~mlQCg7ntUics}slP$T5|Ol7J#|ux(DYUu?Z(y8BU<*w6}DmdnRo^~E^03IMbTNfr&mOIP`Ms$L$0j{_ek%&cB2Hvw< z_Tj#?FwWujnh%;9gu$aHzvm#7AzIo3q&Q+%zo_l=U{t$1 zu$}yj#N$*d%xlC)MjQxvYk6vu6!bTl^Jd|+4I$eynGC;X&d#8|y$KL3w4`tDY--#; zCzl6tvPfogd-*XN0bdt|F;S_6$W7-~FL2coha~=9=S93Or&5>2%r|&Scn0Mj`%-1( zO;_w?h&=2XH*h>wZ(kfMzU4hpNjGj@wkF3q$qSN;b-@WFPT9`t;mos1G)yMP|13k= zFoo@oF>azmUkNhUNwZv0L)8zTXL3IY=2i4(K>VvhdovC`AGf4lu0dCU7;g#nTDB?U zXz}AUjMzX-;uK^WZb;sav(CKuChSxY*OXW@p$KB#58m61GOO`ovDWqGqr9UuzaX60 zl+IunNolG7N+!DEtRF^3Iy2kW+7LAB#wPviqYzqnv)BMQ!^&oCo9WGBs`+dMPU#ti zuX}ORgCRX*B>N1pR5Uj+^t$c+4&ovZ>YfyGuh!w5@IpGXfFw1Q<|RG z2SD7RpE>Wu@~`z%Pqn~V3=e*~{WKA8TeBNoO=do#s1)u;r+<_ppa&K*5Z%-8g7u9A zt7(}vPn?M)g8ep`(w6${g6bU4lcXB#CO*MK9ekT`2lR>qasKGmo7ykMw{ZT0>ZD_e$IW-`1?5vE0QOO(85 zm&RhMikUJl@@-*)=WeU+@2oN;1Xr@flQpngZOUKldXXZ27hS+J_F&a95*#Tw)(A2T z+tv2dpTDU;&O#Ey9T+KY(AeIKHh46rguK)a$Prs5lt)o0J}c^9tiuQ0+{p4>i8fWs z$bQpqHVd@PNT=B|Zek|b-<|kmkSWaXnsPZCs5E(XJRJfmk>Wgl^(2Lq*)uAo?5Zw# z8qCj*=a-y$Z|(l}F4D|9O0KoogUW>xzBwInK&WD?*C=vzRV<*h#N_{6rnhj!%_nxD z-ylYwrr|R;jt<<{QR)}tiW5kVSJklCDxex(g(z~6D)&5AmTs1hs4v zucJwhv>NJh6pe^I2zGy0g4F+%j8QM~bMx6rQFPb}FHj$vGrrqLEO6@gj=O^lO{sor z#*8p5%`m&vIN7Dl>Hd-^UD5u*5*kHyPX1-N-y~A%J^K$sGqb^NxNg*QJ!6+ zd(jKiPr(`-g>G)p_PYHsph5RUfwVfGCe(5s)5=qS#1YN<-P-QZQ(k6&t<`AV8C)j% zJ#Ou&(QWLDhf}f1dneb%)xpy~OB9-%{g!Yiwja~Ox83;^qNckIW<{25=PtlLE z?az>SV3#_4pC=}B%!?2AZJUyWr;Pno|2`9*Rx9WN(~IyaSQ*0!T@YfWN1r3BKbkHs ztn_fPY?9nDQ;T5%$06{~e`7WCa6V)H*^-%A#C|a3bxd%6_ z=LN3jDd3{YP7!_nJ3*;4CODu22VqC`T4J8`9Nwh(KSl=)>9c(7#-4uv13AaqJ*cPS zlb~yupIy8VmCf#zijR>IrGAf#k5eBV_o)ym`FbNfZkbcdS_S-A)qUzW%yxKg=@GpF z@1zTfeA3#kEFN29UY}1KE7|_i!Sw#l7i;#s91E)Pr@d~L>Ei=<1ciYQV{?Tsc6r7Z zz6@MDtfCOpLe*%0-?`|9-xv-0tF?Mc$jmalA%#O3j6{}Sc&>Q${@M!eO+V0FPX6c&58+l+Ghd#PUb+_X>@@1FO2Qb7Y3Q0KG=-X`<>Xhx z4jc98pl72aoASVjF=-QZ<>Hkb3sp}ePM@AglQ@Ly%1BTN&zh=-mKKBk(LVqax`cEF z&yr_e_`Em%_Bpmbb4AG_YN6>n2=kZA9K_sWwJyZzKesr(GdB;vdoZOLl4vWy@U?(y z^QE%ROhxK8F*Y_G977<3InXp_Dgg}1UoI-R(|xCEEZZo@)qFea{c!vre%_pzagr*{ zigGLJn_Rl#(!dkiR#f!-{|E|wJtchH497B7$C}BnhSl_UtkZ_ltRh_3Kl00%Ig*uu z0+w{7{sD3jC2AtjT_ckD`ir(oPML48vD+~JMADxQt*-b;9BQaI25muFI94jYyhfB9 zam~X--E49wc?JoD=Bm>TW}zUu;e1m|in>OaY*71ki|u40GyYH4T|d4dC0j6shkB&x z@K6VdrGsUf$^5iVwih&>@DmckZ}Lp*T-$aG>ZRI(md+UJWkOm7_`&QSu}e-+i4}``SWlzBe|futAWV z5Yuw>ww|dbU%bUrTTOVkVWQ@V{=IgI)MjTWi>O=5FUTC2ZW}2b&ZFt_FaJ|>>%uEn zeiS!gkRfT`BA6e!E9M2F^&Q14C)v8ss-nVM+ zXFpQI!IVtHS{108@Wy{TKmH>yNpp`Vztib8Mq=ho7{0{r#V3T`AQ)HCC5`4>kR=+; z{ew((%;4sDXSZUHY|YlVd$Rk+bXo6~%E07EFF!tfls z`w1#P3r$L+28P#cGQo{QKZ^4=HBAhE8HHkJ5yZZGb=`3@4S)G60j3(vf;n*00zA57 zXyFF0SI(a48xl(ubEpPy?q1)P_BzH*XkdxR`$7x2I^C7!uDbucM*PK)mU#Wu>uE8X zd$$u~5Qwp=F~V;a3&BcU@N!)s!m1hnP4Qs^WNab8$+1S;G&CX3z%)90OtDw??27G$ zYiKzb3N7Ioe}8c4!M=VYJ6SvE;hur~qF`h<25D|=?a=wxRDZmz##Ip|rL&ioL4IYJ z1C1n7j0TkdAzYe6D>_Qlu~Lyf8vyiy|CDy$$+g=VFVNh#Y^?J|XBg{Z$MRL}6nNtn zj3$@0*TB=7-Zssag8<6(qJj`#zlK9G34VdRg)pIC%KrQNKOs|)Y}r0l@9(cJfd%P( zD>`OcUkqqFz9aC2@`(|7osRbFmmmpy6jpmx^DqZ#p+rwf(?57**(B`hqPfPeGCYZ~ zK2=#4hErXTql@~l2Pe1*%DC;pMl;Ra*Hi|%HxzzUU^YHecw*!U8K{B^4_pq{ep}#R zsHa$-CW(ZenUlxX@;~zdUOz_4s5A1u$~PLi$19KQTa!)i)w18TVS@ag5^a?(Wpbm9?Vz4T)B{Ff$Y!-g=H zFNPEAdXb6A6*!J~jz{ZFa_F6U72kj0m=_(xdffQfRd!rc9FlFR(a>iy(>VGIJXZiT zHHs(7_RQ$IEq!i-+scqPLG!iGR2|&015~IWt_rkYVP+*wL~*FhG;Z*y5mU8FOQ|!iX>W}ekA627 zO!7?r{pmYm%@;T|jD%r40rN@Rl1bqBI5pd7{w;^&u_HxSQ_KLqN+tcJi6)Qof{qDG zO8gfr5r+xMK*&OnghZ;w1|CLu-;mJ7KjP1~OplDsJHmFLF~47;H3nltVa46X&@a7aaIL&?Go0SuQ(0QN>>xAGtv<^6{=vg`w)7`W z(-1dKTo*dH2*W4+Y=lHuYuMB=#KvrsF428D(W+5l&7k{)wA5PHG+R|^wb#--pE8}i z$@hEn#9*HJbG+BA==HaXgM$My>KnX=sM9RRaPi(vRa;$#abR5a(Us05>9B`6(S30q zYnxF;S+Zpbqu>=9*!EW9eJ&PH@H}(TVLjVYb6y*H1ODYA-TsK&VajCwi*_ z7^$cH4BDpynnxUuS9Qpsv`ED>{g2D#OBVHpnY+(_v8FKpyFNQk^SSmG^NaYvJG?*7 zHiK-o|Jhy$1)dOjODx184dnbGrSnVwO*ignhaaXvV~;yB2LG>h2T}E3AO#QJvf(O= z!UL?QWr?eg>`kI}DctksFfP`ia)rXj@$p=dwAdyjk@)=U-}pJ!+W6HYk=JEXe~DpF z6$~eixLIPE;ETezUfX6jeZS?m@*5~ie$fZ|h476`d+~ozEshm~G#X&9h+VUqG~{M|&f3%uKdi~>vnu^Fzzb9FqTa-aPFe4<~MnH$8mPt-yeqn~z%+PcbY zA(iS@(>LEyQ6$svixz@vsVy9sj6qq`p7b%N3dhwCao%h7AK3ne!{iwfz_Uo?#7blxX%BY`k))5sr#GjpL=9oiFUtpmo**@X(&=8yf5pY`Q!z-@2@b;cC97zLE5&r zToqG}AXZt1YmR}h4EV#CINlhI_(eU~vs+$y^^vZyPzb*P{?hJujOcwlLlp-atHWfc z0)i z81E3cAK69mDXM1Lt!k1`{^)j?l|6Rg(?Rl|{md3v2Y@(P3Y{->PR`MUlRRM+FW z_aW@_FzQp~o+_}D{ok62%|?W*A_!UvVlTjXW6~3dbVqg*Yju710FM(vY6+kJTk42g`Cc5|O!bLn2 zTTKS5CixG-ov`P+=#V$sRUa5@XI}aeqt__X^h1tsh){OLq`L&gH`{Kgg0!=oQ@Z_e zX$%YuST3Bexi9hN%I;*^a22N7JLkFs?2)Qc@szQI=cF|=PHz?2aslfnfyK?HRh|M* zS*#7@(VZr>>yAjB1a*~^67=$mGB)04Eqqb;8#FTvtC#2J4Keria32uNn`=IPpb+U_R6YtKn_BxXxBiy<2G#0ec~6$!Tlt7bb*8Y= zv)yK|qw&9?x;osloB4lZ_WG~2H}kI%&+q+lFiMoglY=RCxvbBSHFVSjI&{g)5hX?RJ87m! z9CE!s@$}rVZE;2VF zZ^BUbwb~n`3Jt`8Xxm~*mQ&>3r^gx6zrY-VqumXF;LGW_GmSY8G1)x^aFiD)8q^)c_3z_*z(aVGE7y7OV1J0|zGRUX$c%5fOaxXXH!L=}#7t5AY2%CPykJRMdkh) z-=fq?`)}G5S%t~?H4Sa{EK|b=N3<_V`GRp?XIMR#n+?*OUDlK2c%t(AYh}YaPmp8@ zuy{1Cb52u+o*I@`8yD{$0s)G>&L%}AUly^n#=HFPY=kmRnOV+rcKZ>2*7}$Fv3g zo*kZpgfs33onOGYx@6_aDMMTeoyyRn_!uOq75c#GjSBb~p{sD=jsev==ZLIli=%s(QsY;EPtI9P0IGK`>!{aIjW*P&yV-+IAlC=Al9#JuUgBAXG$fYp1 z@k;y|T*;oj5}~@9T;8~Cnzb%`Snb%meXE!ndNbRM_iW)ghI7Ero`-zMo}qmHyYmyn z|89w~=fC@RYjQ2A{{OlS=%arS7WO_Y#7K6dJ08>kc|uh~e9`N|A=9X~Q(?syLWzjKOGd z`hvtcSD=qS&jP1Akjn(6`QYq(r2VHQ7^g@ZGk3LE;yJB9XKNSDh!-b7n&LxzF-5ql zNuRFksC|(9^;%|?l6T+1m2xY)2CUGS;%PZ?{??D2R2sg@Dx!7%ciVKXOVo){!*h{n z?Zm5+x-XE6x-dn=V$~c6>|aFqswfgHvPRJbmp@92gU8uhDvHNw##{^shV0T z9|)688$8+2_G?rtM|P=-rA>hT%7bubekHl`!L;;^=h{2;ta*M@v)66_s_HvlX@kse zV)9VQkS@7s41gUZzRqf$U5Tezv-1Md(ySXN1FDzT+sO6j;bE<2hrkH8q#H0=slMZr zJR;l_YH-OC)>#9@Lw%JMBv3pY59_MxX2l$uI^PTal4_>5Krkf6U10Q4L0)5rl(R~* z*=`KyIH5^VI;qaZj%j?K8j8|*W84;vTX}xxEuB;c@~5Uvw<0$cU+VGCdLH<6q@xfL zRG4ZT_wRJ?3VSEp*!<0N-bMK{_tF>qgCO;JcLEvA6MC8U5A5hFqQ0RvPzcZq2MH!8BH$Tc=Z1_wVi`E6)wj*Gt5j?YV4tTAvie6U<0I%?gy;IldV zWxP4Ode$0wOj)I=e2Zao5^K@~j(O$9pTRn&k&bPbmqmp#DxTaLQ8rR@+^+9&Y^Z1} zI^%>oh9Z+eI`Et@nGf%l+~-pY2{%kdB&Jxf+RazNaTFy*EAKhjHwIVR_qHhl!7PK? z`0`E)H$bfNQAMkqffwv}wg}*1i)cC+ZOSF?20iyWn-eC-;$%=UXukQJ@X2jFse0rd z9BKlT4tBHPj{DQI>-}r>1ZNXJKxPimcC%xU7NF7m;=mD2n5_Bc7Hil-p(wUcDgrp zJJ~`K*w;$<=z=s?LK;`MB)f0X8e3>G({gj?bm;K&_q48`LWiu1Nudl0sfQ(>!+uwI zf*2jWkj}+k;bxs>?ac;^H8jn|6xZCt3s1$Ie9}l%Q-r6zfBZ539R4!)!Zkt@)H~#A z!*m|A)OG~qd>uI{!28V}*YjRvVke3h0-=Go6CqBt6i-@~oQ#)AV8wvJ8$aheWIB|B|#&(79b5PCLfAv@QL^ep3&R zL{P(ad^`9{#bGS7sO;V;(-VbufR7gMC$g?OFy@?{Vg=)eaw?|qiHx`59q#!S+n%A_ z{dK(32QEWrmXayHRE8U_H}_)W2D|YL{Z919uJT%`1WU^(8e#7Dx5{-pCcg`z>M_SM zz1>8d`$MYPWb*bihvZf1poJUeV=HR~<{k-qG6=$oMLop=V#^;aJ~#B&5(o)8u$_LJ zdO<~3J8ol(Dr*MvD@lBUGSog$LV}t=J%lr#ssYX;Iz%dn*QPwUXLV=k12B&v1YF6S z-`oLb=5;Kn@`A!D+7g<9Apk9fq!P9oT_HQ9rEEaf;14k`MY2 z9ptqoHQ>V>V!ZbKwYU=Wtk6-fz}KZu(GQ74ahl!CFH2pMQYs=R5)}E`?XxC1g2}6g$_kJ; z+8b@fTQKoLCS9dTQPnj4HBLx$&Mw?My^Abe1Q2u2em|zf>VxfNIh7zORV71rbrH%=58*(J*gp@WfDdaUD`V&syqK++newA;4}wb2%{JAwB-M^ zmRX>Qjc>KVEZu&muH;>5th>vXHZNPHEB{4r^O+L22fS9rrN7@6&UqwdPpTYu5YBY5--v`RKflJSYggqx{>a}72NER5r#d6hxZ#B z(YJYa9fVn2(9XN8kmV*|O0Yc56D%t8M>j1pg|>kdae&Z<^K@7eK7X|hSB7(v2Mthv zB^G3~XdHfV>{|ZqNs~Onz zrBrZ~NsE6LNYHYs4jMV3-ppv@Wb9D+k5E_;pKPYX(&7{Gc;%4;v#k4 z_<`JxAmHSH@O2C8SigQsyhMH@+lD37R7JOK*6|+{OHs=;dqv5zm@WBL)}r^TSaQ$h zy8t54nA1%vtspzwBcg?#qeLpr;gsVRGPb0fOZlxPUK1<_y={m)N<{1KDyftZNeT?S zPC6N1RmzyRJtp4S$#S0_;C5|mun`+4GcD&RX}#k+?XMA4Dl#Vl1Pmz-&Vz&BRSlKG z2TldJ8>LdMZR0IN155LQ=kk2XzM-H(eEkrrX=%cmi~vf~RVdNJN-%01DisH`>`G8j zZy_*8wBbbp&J(*?ke{U`Uc;(h`pNXoPr=_uzeg!A;=)Awa^Vem+?NI8Cp69xnkzb| zixKh)m$6prJRCfFozG!p5`T0`JGa?44{Q3@6kg5!_v+hWBoJpS| z@2|T1L=W^F;h>D3(#`eeVQb^r$BEy*@hfbT%s?#CDOQ);%sEUvpS{fW5kfCa;tqkW zw`2&mq+GnW|0&&7Vb_x8`NA!zDMHU2$8nJkR|;{^GcoDxSZ4Mh7pg9r+;BtgRbMN+ z^u|nfYa}pjwVn_{boRReMf@ z!2(j&R=2Pho;`B?ke-xkn|S03Q-8iu5ru9;O{B?Y*&>oSESo7kp#en9 z><>X=&jCj(`{|T{Rn`TQEuhsMrq`@&0%9>0}hEZ;JG z`n}XVrxmIp=Em;Jd3^b_AiciiUk^Oi;BTViFo!!&SgY__+9Zfg{b+wboL;xG4=3f zJnhDlk1Te*9t;Hvzr|{1U9>sp@sTOlPNL=^F9g2r!)Pvn4g2aw|FhChGZSO9Ca?Ig zz@&+Hm|MnD8})DV>^&bhSh_i40Q(^sO%u))$%5pEd%V}F->BqeisD)zIe~@-o_kA> z?Y;F6V-TCT(--~3i5esWc4ax&X%L}GY*uk1_P$EdYxBvthy!Zw^v`c&j9!)t2PuZ& z_a=TYL-`Z;3kAJZMnAEryK?DxT}GK~0lljONN1K3o@zLDf}@OWJiM1q#7QGVZm66= zEbk#Cl)ws*oCO7Y7e{J&u^l_;j$^15&9GRb2P4mAdzTD<%xTAOH*S5cBI~~l)nRvv5W+g zwRo_E{>=P}qtj4$&B@KHEd#VfhB7L^=7yH`mh_#4GxfirP@<%Vq*euyzRaAHP)^(* zQKr?$@yjP@Uw*`*2=$Yq2vZYQz>JW_n!%9tx+iU?KMF17Of0f)luVP7Sok#@OvWhs zSHL?hzG)imnO%U{Hrl#U zEuaZ78*OLDGM{PE{Lp5O#?9}OH~9pRY4N|I4Qx$6fg0j)-5YD=MdzTFv-3zlb^tuG zGwsW({#w@R$7*CO>s9Iz9<5H3wwf}&XeVCV`BL;T)J(&F6ZxThn>x^08Fw=05^i&MYV(H_yKEA+%3H(r1yhmUGP-h(vh6P|)l584pZ*~l z4)m15u5#k*u#+Mvw;eY;hIC+*W#F-#AB*a1KBnUYTEmArWA>PQzfGSq-l)~n=L#k- z`NDN5=JkNh3-gaDOpP)zbo~d4EubcyvI;EKv=x>yN6xd#T=B}{NJvYW%G4{6qoJs< zDV{n-twDG8#{FR$W(^N$#QyNv(QT)uipO0JUNwvjwPD)YBn0d^(!cCDy#T(cJQ*7~ z?d_FxF>2;Ou_J`~TusS7?Tz+m6IR&zz6SR_JGBfdh^jXAoElZ6Z2!o$E}*<@!PAA=>gjLyY6SEKAmDuF@xuGK01Hk=b-uQ>p<4y z_`78{0|WiQR$TsjE|0*Z{I*Ae6+XRXh3j92wETsarN6~U;TUYZ3mhc-Otaq znD(GVx+U)p^Ez>^ft$5C>wKp1Z`HgdRHYBfRurYED*lk74ar^uKnnEV)|EuLZreiUnf7wle#thIWxRhIbw3pwqX&VY;@>2F|G`~6L`uD0ORKG0HujH8v;b3?k?^B!pFAI7p zKz8~50JX^KwfA2Zsy&90i~JJSwL^R+UF{kG4s%J6$rb*qit=vXi} z@;c7sUCuH2y@kgG{BNXWE-D$Z)`M(1VkEL z1!b$n)^kTb;8mGk6I*hZ8g7`3$N8VHEi34LZp(W22+78T?w{k=gD}!Q`SLiu799V5 zG5+7Nx2SM6HJtwc5t(2%A;UnW93kDGk33=uFw+1sG`AQEyH+g+f%o6t-=&fXHtzT% zBqT@iRs&I;O4iqg&I!gbM5{~SBw#<$PUp!hRN%*}N)$V?0S1h`gsn6@uSXAuR8|Un zjk=RRBlVZ@=6GA)1(s@qB2?Tr?z;7b9E7O7iQ3cg|14<8bQ9uqw*dp$4FQc8yw=md z-OfBz*r=tjgr<_q?y)KHWa6b-6SjKGP8`Gx{wC;-pkV^$t7Y}uarrol&d7s{CKdm{ z)!ZN9dTP=9VO#nKxVDsHHpofddj;cl_ytwY0%K=EH zS;MCv-{DoQ`GGH8Juj$0!Z?~8&;-K>7n3`!@%DguqSPL#+58~tkZIV?S^~++{E_+o zX7qTj?UZxjbfJ&BODz2rK`S7*W<4guBss|nq#C;xj5x=rJ$x!@o1_&S-LUK9_sdBd ze&!fXdN7u9ob=t6aBnMoKk|NIH4%shnPQ_@&)#PltZ6hkwnu-eIJA*(yb{tmY)WvJ zW|_^O=k^KGflcz%bgSmwrN#Xmjcc&pz6MiMdskMWC`I@*`pYCP>Uyu2S*n7fByW{0 zr;Xx*6ADg~EabZbVEt9q1_8a`;_rTgX-K)}6RG*-xz0X5dA&Zi5NXS?wnPE@^o-zG(?^GMEt6sKf;tA2H5k!= z$Alh!Q-T1OT0S7h57B`6F`t+l(-;N*R4Nz{KW2VQa3Ni}?5bud#9zidha-c%qDJ(rwR)Ieea!MBl{M;omr&KKTzS`ac^~)SaLX z7w+|hvQIW~z~K>D@?ej>yvJ%ukOXNm%?)t&DWZRF++kN*k}zb?1KTHW81Kz8Bg@** z7-#)XHYhphBK@FMb462U zk==Oe>>*xowXi>Xs^Mk5?F3%dm4BCTx1P-IJ2N|d9d2z5p2aNV-OtwKLy&Bo!2dp* zfl39qv8KI6+D|v2(hl<1`hh&npH%W&ovm|+3NzlT^F*i5wEK;v?G?v2H{M7+_U|lr zW#%A(18($sf-Y&Qg04pU31A_HuG+IkSHUR=%In8fOMmxO%##iYKVJ&SHQTcq&w*cw z3n~&N_s(DedOo6wqj+n^>G3WXC8FQOTY1!PdXz!dBo}cDo0k@nRq5kjXSFin!pb+;M_ zC|F9?KT6lmKE`N-=**pI8?*wIX?wS01!xY$FBPQ#jq|qjHRsrt5{5})KN9zqiO?FB zS8BT((pIT1^vy%yg#CqHR6@rTRCz;o?`!L>H&ZHpBTiwHle>;=3cc*3)4H)3l{TaR+$;l%#!DhlOI%C9>%F~fBwZXyg=v#$k-sWyUd5M zYVf-3QihPVT(bpLny}k87)J`j{0PN;8+6pK&_V73qp)WcRxRJvgw%aC(~GcuX+`si ztva^E6F3FtwBLqhsj*vEFM>^8!}&C7ZF&+IwAy%0X_<@b5UWg ztp{En2Ura4Cg`?bo*frZFJNhE>e?%oA?m|}1%a&W8MuumNFqOjFz!tsMEPDsF2N|4g5mu={q`1hCu^A`^1*et=U4|l z>=cL|TJZ;+%P+rZjBo%$5D&3-gcLq6e<6nSJ;zY3i}@*;^|j)Y-*b}}G3t}})wR!n z>AcedfFwEh;8PGGA-K~@{AtMT?%fPck8^$awZmJz#E$P|t*7{MCpv{93sJ%iVE9=i z=o3@CLZpT$R5BDsX57u|jlp^MkH*l-4lIuyWK)&a`9Q!i`-9~}gF`M|WNpJYrD!25 zjDT1IAeQO{rN@yQxNi$(&9z|YTEhbNR}Ny+;>gsDp_YAiKPN(V;9`|_SVBGU^xK*% z<0yiEZ*8IE&k>1=&uWL(sn69k?3vb(M-Oipd%c~N_jwTCW>c<~&@$$9tk zP|7ACHXKTqFor`RuAvx&6zK1r-&*acHg?Sswi^s%TT&aZs(|i6R-r( zoQScQ&iLe^&6EIN2O!8UK@@uXTjdl4d#R~dHBlWcnP~k>#lt1oDfE7l$tDiT24(m!*wV|gocU0UwP5VbVz)HD7+6&t zbC70LQ;pV3ex85($&g4CuvN=Pl?W8WUBBLtQj5@Dv~?N}`D#ghL+^Q+NQP*~$@i6A z^BSfJzy;tp%o9s;$WKYDc#k|XRU=srNHA`4apMX5(oWF4Z-{q1h~s?FYVK`m!7nvk z*NC5;=3#HkK94wQjGNd-vNN;H91-APp)hCz>A1{a|N&a0L;6QCKiSAKPY`)=$Hl+uRp4d=8qz+qMByz zO9`c`C#z1K_ksDE<{)>*4-se5JfaH6c~wzl&UR*8r^#Q|8q&Y$e=pwS4uPB1h2q3o zPd8JTI|Gtd!2?WcN6ilT&nkU?j=my+=!z)Z?SnWQR=uHR4GWiD{dCmw%#AQA|2~ny zaea4ptfHQlma(|oxQH9mX?%1KIH~{r^L7!+^k54y7or?+K%vnzsr47*sT6xJVF@J< z{5%CBcVKy5EHN%iESR|Cv_&%u9m(~nu^yBxgZAZfE03I~C_;eE;FQ>PH8zTqtmO?~ z09*8}##2alI#BcZ5uCNx*W8pIYdzAF##bjW<|5l7p0@B4g6Nxg{;0Z!Arri>e2Zkx zF+hcMQuE4sJM?K)`1J*BoEI^b=S^R%bCXxq4Bb*qM^_PJWkgy0KHNd$qhuFp_wp(1 zV0s9<0-fV-=zzl}Pvur^1AMh*l-GVSHQHi3c@Pn0Cuv!~JYsAh6YM8B}#*K=-RN3~7Y z1<9U>-BnKm#A&7;zPu;vnwpaGp~&b(d}@H9xirBS z=dDQaMe|!-IS#mkM7+fCs;1vc(x`OK9?`WGL_HV-axIq9jZ$1niwqAQ%1C|*uJZ|! znVxFQPnb>Rmw1h4e=5`iFXz&>ZvTb|Hc+OdN&nm?RXXm$`YlF?kwS^O^-Kb8w;U2d z!qr{P;V1oyelV;K?3kw6st{jX$XH6Hozb*ziu&|6@EzPcKMsF*qn{}^Jdie{2K7^}Aae9MEIqC@n< zUz2({$1MhMu3p|b6{Ei_Ezl2`v}>QYNQic0-7t#X3$f15F}@m-xO21FHmDaui^F^* zO;260waa27icxvb?2zCu%ilOo`Kx{wGaff%TI|Cx)f^l>O!t}{u}AVGP9h`a^YyDy zXIgX9VDGb@mP3!;{)?SO@xjC2jTb_2a0gzMS$ZJHyk)$FYJxcOenLD9#4d>Nidoji ze(-l-Lc5W}D9`%Rlcgng(smX5Y<~8flJuOA3;VO7iGkg4w5$!BEuWE+Gy6T&Uizk4 z5kWy5V(mSw-a=wb+z%XX9X~geWcA$O6XVFXPp>RMmStn{H)()uvJALLS|-!Yy?{W@ zOZ2wC?yvG*+Iofa$U80BTwF&1mm)9)u5hW@;7~e(OhJq$NvKx^f&bpZ`yqt4w28#^ z5gFeyBMQFHk%dkKmiUPyCE2;$0G%yrwjEW9#3%K38t2 zm6+I+j#eZpPPViYD90@}_$`oV%t}aT4GxwV-cj~F(wDhfN_4q?ctofbk!^!%P+Uif zrK4P1s7HhZ(Ho;Z6woGIw>|{B9~OP801yl~*jY~?;)WCPR@Uskb=I@#SvB`uXHIf> zqWOXsiW`bL^fRmjbS^AJOr<-P6nioKvj+3Uu=9%J%`fMpo#O@zLLWy>+k=p+B5t@0 z=Q?3VIU#av@&MtvU0)oI6ui%&?T{E6OT@YQdTzUun|9u=DNT>kfny*DkA`;AMP}lD zcV1PvcxiM1JN+;4xTDS2hehn?$-oI;JngSMo`ye8Fd{uJM`rd?`hXT7=73%qXFi<* z)BRUs-RxVnbzfV6MOe8!0 zeNe2K?WML0ZZ7NN$I%jcWW#!%&U5d`>0Ob6`MlMraI%VNrKe3D$g)~5tX?c2;moo+89$2y zfVY&n7*k{^$Paj0aYCutqij<9ok6uI1>ftLnGiEf5+v+w5~i*8AQ03>)RnfQDH4df z$&h*`wrRN8vC=}Vb$?v+xiI=T?|te3YLV)QaCLcLVRy`C6_x13O$xY2g5{`oaR)q5 z>xt(bX@$5Gx8M;j7nWc&J_(geRk)(c#_vQ(!Jj$|w<dMHmouyj#q0 za-yroj3{cNO$fx7#N3w_#IV{pWi!z^68JS( z46A3;^*qD^clF@!jfo}iaqn`?myea5GiUW|_Da!ibAlW)Y!xIMpnQNdq$WDH$rax>@Hhr?P!&&A?qvv*s1 zk&Hy7k)NLkygSW@L>)|wBpf+p6Np>eTJwStdq>8}{~WLE$~W1^QTTkq35&waz0`EPVo5-Fci>b2JT?RP zi{A-o>~N8#JDcEyp}zd(JnLSV4`r7&F6%FfQd*zHC~Rvw)^z-X?lU~m5idxY16b`! zc1Svl+cT5pi!O1ohHayBLHhztI)S)+!4wS-SWseZOLCyMIN&8Qn|~^PpsuDM9gV`6 zpyA0R&Z^K*GFEXrO3-R}9KG2c{B%j*yTAh z^=|7qxScDXwKrrdwgU|{%y(wjtV|>daq<4fcWvI4U@peSjXW_A%j=RnxgUC{|7dwN zphg}-89L(oGRgUSLTv6*6I#1S?f{Z3@GAEy7>T(MA8MEX$JY!h0~8t9@8q>h{~*W#wZaBRnreE2jP20m&4T-unY zY9C|{sqSl;I6`Ox#WZ|V?WvUVV>USI(5>EFE`QigTX9PID0)3InyZFkl`lqJL8bM6 z2An8FzXyZOT>V+MgpGebpJDmlRAL8LRpwecouZGt&-*-#{uq?obJ&!>mVVDzgPA+6 zo&+!L@k=Z|4!d{qm;O!G@Bk61e8*Du#VRH{cs$C;1nPp57)Y2Sc{>$S!6gt5a_@?} zI^m-+-}!z`Gc=GeN=j+Acbz-OG;?i>q$35lSXu7Z8<)7hS9@YX(`YL}99Qhxlzwi# zL9g-C`7-?XGJh6rx{CNoaAnJ`06H>fJ{i?iKjnm%pV)zj)mU=q&1I;Iv=d*`ge5NL zL4ox+2y|N=u3-jP)X=)$TFDsD)6zZ$j0PnOupzt}Ld6XDkZKU#XlT7)OzLVNO%a%% zho5i>BccBEW%9Hsd~(_ww@G&Wrsp%SBrt+M)F6qpg^GPxH8Uu!GW69Csm1QgGy#$? z;freQBY!YGo5AG9eYrkaYc#u!UnbI=d-TJ)OJE_3}9B^g8?X zCo)xuPuY#occ}f?;q+f+*2Y-{Bat4ts%auN`7%i*)A^X^F6LZ`3ffTWB3ohNBu7rb zXOR?(+Y99J1acyw{Y0>xB{uE8m8&0?{fxkh}joe>$w5g5uKG^!vdpjRZgxxNq>-@R?0&+A`VzK6m%l(Bb zUJWLHX#~HcPATSZ(Z9KHvME|lz=7lPHN&~03_ERHpP_2wdB`sqh;c+?-(BE zk$fIBNk0Bz0&D0O{>okFGIL$Pld9@MF7Jo{Wg|l&5JLK9nV!XOHu7+!)KGsh_4vw6FG-GJY)nL^(=EAI79v)K z;K+WlIV|G)&3T&2DB5)Y0#TOu3HJI}{goV(YgA;%#?u-Z>~C95tQ?~djDZxJ;9sAU z^4;C&u-4{i-!<{LWntf&aP>=#)e@r|rfIq;r?Q;GgsdJ8NtD6j3g;iAw8u~B3)dkP zatItXPhgQ*&;8_MQ(z2UFh;9Cz*kmi<{n}y1h(D?G_?Ai5GSqa03sX2>`17)RG$W+JWXrXr97z8B|e8^;UcucwAgHc z!>_cBHmWLkH0)jK0*Wk{T02b1&`{)F-g+G0PV*TXWA|u_9Z8TG^cs?%g!K|+CQNRN z5`R+d9c=hJuw-X3DTaseKpN4CufH@4qalzuRXbC^tu-|sfj)5S2{loPjyt^F$FFUG zWB!^{Hnas=!FWC$H&kWA&e^V?6v~trM)i#DY-?R=K-;YAMu6y4;dB$#BgjMe!5m%x z03KY2H?75PXFq5u$rO18P_dB%&bY#;`h)tD4_)O~ku%TC64yr=u@<5c^AAjFb8?3(yp-Ce~y z(>Wsn*mwD}`&-Jc|E(xtdX@4SVGxEepyqszXmzFgbqC6hVqo~6ew<9h)>QFZy>kDT z9gPTemHtxj-|Pwz>QNlRrk+t9=bIc>fZ6|gNpuRa`^Rp13^v>0NwM3{QSkU+lT4J4 zX*TH!yXF~KWsBEP+bZ>AX(A@KGMy)7w z_c{GMJ9APfqAIQyLk+AkaE1{1M>_%Sh#p`rN;aALrb^kxjY|g!{VxC2>yO2sMCICY zU|!;qNSFI6GvyfW2+hpOAlTB-LNoY(QT3Kx zZMNasZ74027AaaBio3g(QoOi(DNfMf-a>)m5Zv9ZxI@w4lHl&a-6hY?TJP9KYIl&GRBYg%ekS_^@xq71RB$;FS^P+!+7z|1m`K(j z47w)Yc_-;fm9cgQJV+2#<|UUf!7;OFHs}2uJ=&J&6t8cOCM)n8IP=XP0e`epI|e72 zL!YlcJ3m|;oSb;esQd>1;q*sDHn_`2;@A17oFi|G#8sGo-QCzoNoyFDH-C2q4opz5@=GlF@68yr zzKJYXP2Q#@sm83UwAHR(8f?sS&u!*Pnt|S%Og5U?gp``?a??@ln2UyT&*$-#+cdWy@_~T5dR4pv~;+yCWuwWEt&w4f;m~SrD-7T2ExcIl`Y${M`sl zHL|b%+w>_|dr9w7R>p5uVR&Nb?x3pD=H6^8Of^Q-CZ2Zf{p&xaM-aQ&Cz+3|F_n1W zHc@sZ9V|K^?P(%Q8QmSSg`_*PdmpX{hOgX@xeEHCM_8t+^?E0p4Uim$ z?Y6IMA5mj9$KBh;hX>rac4ApPXEp-}Y={Cl=BwHGG3a81%y_o&P#ixG$_pKRHD3Ky zFfH{|{Fem8ksJT{%pYOh7v6^vh1Jhn}5M|N`i3>NG zzP>8izn!}jIG|NU-o17Z4Je`(oO~!7>?Ig`XiRtVzNfU5H(<8?D(g8Ny3oTTpK^+h zQ=vP?^l$PNY~4#DZ*JO$fke4=4{<_qXg?%>KL+L~+I$V5?GDobf2F2F4z83hf}`qO zbH-zLHTYC>72YIuga37;sQae^R!$y0cA(}=0u{FA1&jM47L4lI7|(TspL2&?r>q%a zLXd8LCt#h<-b9{DS?UP~ZIGx;GI#xWqHw}Kx>J>+$5eh<&PmaBdlbYcSa^b0aoZrt zPtKD6Hu++Cg})y~$RP*HTswf4=+m z3+wjzLnFo*f&;dWU%}W|95x zP6++r;h}Qt+B$06+Df8#=}0$wYpaK7P&XWrOo2vuTzh1G|s`_ zck{@Vi@(e!M^7Zzjx{>_fWFsc3akzlWgNAS0YEW8{m<^k1w35>~L> z1GV){xmFcR%y7Hkh*ptkX~nXp4f$h?OAxp5Q)*UN@UwgqS9Jm(-fU<@W1AYY`j7_mT_IOD`6fGX_%v0 zQaJS1jnFW;xD0nF^ab-DcfA zDAd*=e3?m~?safu6KecDQY;lQiYsE&QM=;C1r6S_pUFByHhSL-mnp{U8%eieaQyCO zdz<@a35Pl9Xg1cd@i(W!k`INe(QTrNu1Ztg3@5&3e{GMLltY}rphNd3OCw4p4q?dw zbpstc+kFwowQcDdd;UONTLxT*SB9gc0gqeSY7(E*;+REMQ2eMgGdD<6hpRlt zmwZ$3X)zi5I+_#v-S|2lO=|1BA?nyFe8rV1QT*0NZX-)Vcjol9*^|9>+9AY~i7~zwqV?f@-ZlHPk1DjH1PQ#wlyyo@0Ru24xWIm{gfn>+2A8!@J z-TA`7tI*kn@^WMmU1(DEYQD-}z&O$?T|w1-zWbSQ)^9HAd7W=G`BnXnk3^R4L&@}G zNx8K&CIfI*Pg4-TZlL`s0%PYzSYofeTtRxRc26$dqqwPcUolUMB?`dx#yhNu9bitK zi;?K^nUcz-n16S!il~wn*wkjr5arzdM;+F(^^<3_8P*V4(z-~F6-TP-cb$v#HK(6c zqM{h$za#C{RLEAxXBPGK*AQbf^rs+WM?>5BJy8gT|1T6F5;kt+@;X+&!H|MyY4JVJ z;4djgMk)h9@_FF@D~_I>I^p23PIA~@)8R2(KwekSx7Bu#B^|ts2GxRY>p-lLHj|R- zH#FYi%}sP}08pUhuAcI07Qt*%d(?$aaB1T*B(O-?lP$_)oF7(8xv6D-j#dkbUw$id z7?aRrLN>?O`Rdd+ytsZLq~KSE*MZ_Y!@A;)%6K@{d4^YzcA}j78)(1ElefwuvHMmG zu*OT7|2*^U1w(EZb$1&Kp1cZIqgz0eLyg*w(iu_7=#sqJ2o`6re*Dc zozgOQz}~|Wjob;2$2UNjN_4!n9Ly?5wb>$`M(t-U^&R8-Qh4uWYZtD9dPMkm5`7Op z)X(Msf=WPb-RVbjzN3(9VE3sR*#W(1as2#n$$jq}kkn^T0dhI^@$ylSQtE!ll1ST> zZ#c174_{4d;f`xLI7SoR%Xc?Qiut3a?)f!<=G@3o8rxqb{~i>; zvrHw;NSfD#uC2&B3)R$GLufK@(Vdqk?Cf><?kYas|CG+Bya67&E zOQz0mr@cHp*V^-Tmn$8IYZd`&!=!|_Qq<%)rDu=nVJovA#pby`uC#}5SXUWX@#spV zi_jNmu?RhYHFw5aZeB;XK5|i|)r4wWvXk6aafV~JHZ;~Dnf1{`%qixW-_ebdBr7nV zB9g}GU}V!}#0IN~v?A{mk&u$5ll}@ebx2U}7di6l9p>kw`ZpL8cC6AlgiNql(HZ!O zm{~E9N2*XMOE^Da7k`LS7?MZl9MGMu!rE4aA$8?wCWrejGTyhVB**XDw7U|!*>i@o z-@<4|gvu-I{_HFq!eY`wgPAC05?33&^RY`KFAtgM-;Sx65MlF~7?Ewsi5grwu&ka} ztKyDRA^+~8E?73Q);uamLK9L#h>SBAl=VJkQQT%xCY&GZ$@-<;=%b1{AOHaPApi+F zjs^|ZCk1%cFuMjtOK8tLk#^FK3zunSEXT?ARlAdsFtC_Ki(GGc1~al+eO2 z?@9W;`s(vbUc21a@TE!N0GTOahtHY-6dcbSY}b z?;^+=z)sD^_P7oIm?(NkPL>6wmDo?7{}HN1FCGQUU_6~l{V95Ch>6`Wl3eWKXl{?I4I%)+g$LDsJ;obf zuQz1H3Ur8P@$OIFD;_KKhDt_z_@b{|z2shO`Koe#(s>DjsY2{~4`|O-T=P0TPqHAdlUMPE%2__2V{5D}kCa)$-Ms{3GkM2F@WaE*8Vq z#V@~Yy=OV~|ugX=oM4X)a8FZAw;^?DyCB$NvC|eX_TrRUB~bO;r-F zK!x*xwP^9q@zump>X!Hv&QIo7;wo?bmgYQAR?};8JR04;pmk4OTh{Y|e zW$`QPQ)LfAhC>SeR3=o5^^l!ndRhd=E2Zydk++Q=Uabg+jWtJW)ASvGYTBSIxDWF~ zB;_zNQI4J$XvLf<$E;@cUwlD=w1tuSS6g&cXX+ULvVp?mnA9#CAF}lIaQg=L#G&ch z3FsftzwH*PFu0<&x3Zbc*q#{Ywy$BLlJ_Rj9k?Ec=~C)?LiDy&+Wr?`A_yB5genS_ zM$Z2Z=-#>u)b1fAl65y{kFNg#y5*jMR6trJed4ckSD^O-tPATs}}$8DUl@*iMKa#L^L^lI)2fvEWp zfG=13C$N&Zdh|4KkLtYAjq~Bi|9=>nNa{erLcio3rmp3kVMUhph2cY1SzaeDUL&8IRQ%kIqeD(A>hGXdO={NML#_UdRIoB$El zgQSkZ-hm~`u6DIzZ{LFnGE1MvbEI?~a6YldLbv`L-qsFKd%Q8=NmDb8Ld}t$@g-Ng zUVuhv6+0Q5+(XyZRasADFlaG#$$j6coY;6&3}nZ97kY)MojY{y=yEhW{%)}A56I6O zl$}>53B(c;++w;hcXg#flcf>^3xjZs+)*!%l#8tj9LBq&Zn+@EcF>M@N?*VvO~FGf zc_?Br@?!3#%2#w+n^fk^^5OR7z@p405VTg2L)_7Q9{COwND$@TPO)u{wvB zl{Gy~X96bjoQaOukS70EM#BuAKBmZ8eIw^?o&3ozZrAwv(D(!joJAD(VYV&0OXrt{ z4(Qw1Ma>^N*q`R$(O7!vp^JtL(C7WG9UYKEmtHbBV$V9$Ymd3Q+D}+SIO#t?16X`0 zL}euiBx>#m6k)wfw(_dktgq;b+qg0*OuH)0BM~kCz`Lsk0&2D->4M5$Q}D@8`O`%FUb8@t8-akB}FQxvrj8WRAD9Xk4PL1w{_}zO%c4YRYj$Df}FS+mr+5nkODmx@b0vupbzGkdOJdG1Zc2LF$es}WMZYXCt zue&g9v)RsD<~w9uTz8E`iyDZI@k8j9xO*7mKBH2I!v7>z<%_MD@M!H0qe>%{Jtx;^ z(QWQI*^X}V)FP?+wH?RK`2rAhxCPyIyaxOu@$wGc@wlgU?z78t-d=Qh0&{iwmIUYMwQ;X%X4xKCE z{$CcQm*>y;uoJ4SCm2O<(M?A!YtuSAV!|O|r)NTTJM-6!x!4qX%hYSZrlz~O1cNnc zih+h9^JHc%p0@a)Ldv(ajQ}sx{w$xf9@BU3b$-0XHU_J^{d1&l2F|jpXwYvDY66?6 zIX^xYBddRRkHyG3)oDqkQ>mMrH#042juk#qpE34qB-_L<@Q82-A! zzB<=u2j>u&Kt{;I)7nL{lrJ<@enDuKMElxTcVb{!^M4Wz1`A3~&ihf-Mb6UBE(<$u z&lU5bwyeGvV%CYWoOht7;WZiCS0k_DfBwwb@lD_B|FLVJs1Ai#k)e}vyCgS@Ork+Z zBD@V5HVthVpGtBL9(Aii`bDl!@8qzIc=AN$%AoTKZxkBI+P*32~{|1Me0y*O#xgqd^cTmk}EwGbHvxz6S$8s+&=)axP9Ew8P#~SXd+nYK-l3Zx3czj_lPRI1d!zmg3rak$EVvw@IK&odz_*{l8?fkTGd2=Zr8^3?#cmfl5!#VOs^ z=t{uDv0uPZDP2)ti&{&8ZfaNjQ-anH1fCpNk_$snL~|OowYrc)1rE%y$6m4UaG|$~ z%c=U{y~^qN53qzMi3j}XK`G$CDmTJvpb}CLoxuod7yW?q&28Vm)a4bt-zi38@xELB z{I0JNdNW#4f~)*#mCbDNr;MyD;Eu8MVBbcmh4MlJ8PG#Dls13U`Z4*kY9T{3((Id8 zk47PW=EjciJZfUmdFSgT174cbNA*SlR#_1yBdexp{%#FC5y?=Gk0N&wSd~`Nc>gZP zJ^%!wzGDXQW)<+OV6ZOC#SZ%VB}>r2o+(}_l!~?Gh#mJVKMN0f54g^>*%nL(?N6A0 z?Y@w_ja*h`A6R+KjOVB!OdgcF!sRt#SGes!Tt&A!<);dhnBQC!Tj*(d^X0{kSwi0^ z?PHAj;86QEN}999@Kdz#eD$O#H;zqjN##zGCirTeNL32+ebD9>dS>%dV(G7Ri7NADRkwn zgO92ggRy}w16}`$Vx@vWfmr{bY^&#ppe2tIUq7epU5-|5aR8$*quA8zJGf>W7-&|! zIBXSQG%2}G+49cjm7x>PfdI5{TFx-g6<>SE%a=F)aA?Gt(TFd3{G} z5brI~v|Js9zLz^S?H)KSy7|tEEZ-Z)-F>_RLw5+An1MVgQhTcg^Yjn_(vyt6_UN zz-)BgO=LSa1+>Mgr<>||ZDSg69e=L$N}LB0anxg0i)T>5$vZNz{k_DKHThYo!eG*z ze>|z}D|zbAaFk1Az49$;F4d-q4kPydd?F>h;&*k$lxFxp{T2HNneXqpH*2F1gpm>U zF+dwPokxd(y?8p0c}@MpKb87_Ag7mTYXPm#$U-4{nD*|dFK+^FxEA4#O8^h_#^37X zl$P1EfkuFyzK@0_r!!XZ`oh~^Uo|_seDqu{=Vo6kB2p+kH+|5RVznc_1#S_cHJ_xB znR`NSF0br1Q=vxNes3Rk!Z;Od67$9m^uvSi*|3c6V?Lnr61TT>+#$TQfR$uA*lrJ# z^qMv_It<#Hr*M0hAlN}tR(Ln~suBzURdO2(8I)_(Mtkv9TRkf( z-^qlX|I#;4TJ$oG!R~}7z{6vQLdrv4T0 zf*xsrrBX#0wCG8^8q>n@VNgZ&KR|i9(NcYOk%F1!@xd{D<5+rO{u=z1nBxN)whWe` z7Qx{tKBu+jkF#6)n!6(8!9MI>W6xS{hS@uF*2W92w7GtN?sPYKNtoFz9)*rXsll-d zhf)NV)wrUA<5nrcoQk9t*pMFszoZJ>i2i*RTmvMWP4b~&r&$Z+l`b0?L`{lClH!0| zzFD{4`}P^AG@hRg_;gm{4bwNmPP|s&Bg3-(o!GQiPNjtkn@iPME=B7KK#x@S9j>S9 zk^<(_LJ$^Dv??Z9S&c(A#m*C2;yTb%(nIWnOO6gT%Bc;$sN~|PagM@$jz#&&?z&@; zdiGoDxIivRgKs3anaIij%U3_+5+m9Dk*Ugg@OAt`sQPM{lijw<{LratYsH(RKx;7^ zS|t|14-MBV)F~g0UFEgD&iIOr)D!Eu;+EMD{QXl35B@sE|)T*1;B6TYrm|kOeQgKcyhQ zq;f$qmG`Fk^_i0QLRE$o(*NFahDLwGP(aC|=O2>WZV$%Uc;mcfHB;%cK+2uz9V;k7 zFw^j~i`ySBTS9AhvORT$%wDrn7CK)>wk>p4d08P&5!~cbRjD|MWkN$|5wvv126#@& zF-MyLDL5e=rcMsl7TRZ3E<&17T;`$hOk}d4I)ZS?uXB=<Td)Lb+vo_{b4P|Fw9RXbEwf6LRY6QNJ%}!Z$6si5AKP=V@P4FsDj--L$F4 z?fg>~;z~_CJi(ek04{t$NcXWS$a0)jTt3+N6nT|Y5}*wE>4dNM=<>=CfIBO1??lZt z#v2*FKv1VWNtbahmOK9g&>{mAZ=MXVgv5FEnv-Z-Ydh3iEcH#%GRuZ-rdeFTZB{Sc z;b-5~EYg`Z5$Pz;gRG1STy>(e-+pxV$I>OqGXDuvH(GWilbw5=ECg_y@O96N#tqE> zlhp6g=OXl74!w1Cz2->XA{yZPWjV4$z4p&*&lib?pCe72^w2k-W1iApT~l^Eeb*p? zx*dI!HjIZ5vSIl=@7!XybtPVeA1(2`16;byb^X~DEuWGb(*9MdhTd)i`@$Eg<+f7> z8O`475Pp{Xv5;5zIYkoxyYliE{p88Kz2*{1n}zHE1*20jsUq)3*B*jU9$B<6WYcF zFGZ^ee&_sVi?$|Z8gbgb>2)vl?=wzwvwQa687?K9s#2RMV{@VjdD;-*&iO{w+gkdgNTh7|Fx~Xm>O0&bRfkh#dGxX!_@cPnhXZ5-?ubT~ zrhoRdG<95exyqUA^se@5sgJ>PNg54cxCp55E`G0X6*mw9Xp%TEDib>NxR~&l6PwYz z4H#z{V0K52Hb!?uvSCXKO)EY~8%)}u>igw#wuq52!4I+$Nfy;`m(9^RAXy~4Sc9kQ z=Q>9dwEchD0G~`(6Al)mx~Ri$cTxYx?BC!-VcRML)zhiF|!t0}jU@D@J-3Bc@kGpDQ{#cyX$Sh2W z|JXOqs6NZD-C#@Je;DZX@Q+%v9JVlzMKbt2NL1eTZ+2BjKaMtOfebZ<Um8mI3tC31@lKo3(y9%xNuKMKQ{{+egcqP*bJYeZN`dEN{(EAx?E8|fE=o7l2O}5PDD(AOO#8UfAH4!s=9^U6-wTyKSF42To#n`}<)fMPyhUN+< zshRVdo<`SdV3v=y(2oA3D8TeK`W1U0UY!1r8kz#hzh@izOvXP5I$Hz(QNx3Mr&K)3 zubWc0j5V7|S)c6m&u0(4+U68a6f0o!OzV^`fLOU`Dx?bp7KYUrY_8<82}21>R% z3aKL%_zcc+uAeDzVmrhoq6-%c%i?J=37z^H0UGBLAy{j*)?~|RL=4ic^4sXbv@t5& z{~o8%r`|50$eBd|mZm^XwAbT+0Dt^+^AG8O&(0w1w{Sj`V;}TrQb{bsm7_&Wh^TF2eI-iNjV8DazDQ5*#Fg=&(}yJx7j{9qnC17iGgj>@P|5N z)%^w-&Dld*^#UG*L5M#3oSNt{(|K;BUl}$y`doi6QJ2Z#QL+UxSSG&>N4-xZM=|n) zs!Fd!Gbz}`WNZ@d76!1|T4tHY2xTpPri))Ma+1YKKZf8s$`NN56fWE5oP&-1)8B3+ zAzY|?t_WL)Zuy}#zU1!sTCkM^_pI8^wAkJ- zmAuKBy#P)QG1T&$|B0B{>6&OG?r?H;CM5;`1GwglUdjFRvIn9LJ~=u)FLPbu&_(@h z_v#Uc+y_wl*)>ZTQqKInh^7~0mmE9W=^MvGU(-s6&UHW->73ZbispG?C?yxC-R6N>^b^KBDLLJOt zR=nhp{uvUz{;%KyeqLqMm#&oB+v%wFplX(`{<;!n1&md3d0y#*`ABs&*PhenEDL3q zbL|8u7dXA{+U3uC13dVRM-PLLEO1i~k8;)+UCdvVX6)WYC_Yl2=o1j2Y)hWk-mE{m z{hx8~fn;5&ceddC;R9vJ2D{af(KO}Z)9BULajKyfVgS{ViLA(P8?BwtIdM#OeeE#5 zFt0PcwrM`j#zpS{r}VO`YFX^S-ek1jz}cPbIZBqwGU;^2EF{JWG9P#VL%dL3)R;f9 zgr&j#18U-rbciQK4u%*}nT^BDE^{wCjh zp|g?Lo0)D@*;oLdH;XaK`Ak`ct?ZdoZ`@oRrEsw};OyB59tv|2)?&! z)Uvpn((M{JdwajFazWo`FhD*x|4Zp@5$YalH55lu1&bNxG9#{xLwq!S?<$r4G9&i$ zcLa}1=cLs0

uAlJ%>;-_LdHkC=XLn;jBkWol?;2>g?}{ZdGMOS@i5IIAcIo=%&M z-uCdebSDp6AksiI;5z=_=Zk*n!Wo*Xx@gQ)8Xep%UO0haRg>N zoXjf?hpjns=)CE|Y`tZLv7%yx=*-VcMz+fdN?hkv^2$u^aTLKTstzRKt{#9MUvJwC`nP53Dzg*DauS^J&OCFL6fUu6tezPr%B(i&e9Oc{%4l_6GcRz$ zo2_6vG=!hYGcQi<3dq8EV@e-IZ$)8H*yhJ2Ev&odD@8~*nHtWs>rGXRYxzt5sR3-G zB%<((6wo~~RxbVnBKk8@HDj@X91a|u1xsQ(xK9Qp94c%^GaAh8wtAgFZ_@Ev{J1#^ z@c{d+6gYe+qX9G7sORgy_RfdS*HYaMoC>m)O1q}60J@_~C?Fpq$1EGvp$-y1w@G3f z&qI$4!+pld;za`F77*|vnu~+|Qp+z>Tlpn{RbFRM#d^tHF~}tntXr!Vk(g-MIGOg0o3C1U;F5Z? zGs{=3!9FL{n@<68L1z@(>w3>K0KrvXOQCx_s$QbdM-XXoHB{+lfAoN<@;dH4&du3; zYRMKVYH_G#6?mT`bu^=k$uyA^LTg zznpYBv{Qe2l;EJ9pBNFMq9WurZ{cZLx7S&Alua=IQKtiZV9zgD--Hvp`lYsbhWMCu zCXbOtJz=%bO=^v~e(^{nHi|D0Un0ItS&St}nj~t+B5E7!4ECrysqTn%~f9f&e0>oS!F_}Za(v2C2i-kgPD$E8R0OF?fh(^N0*3o%p?rPh4h?`$XHN! zFBPWYeV}$UCtN8MWcdT_BMbHv?|u5UvCS3>$I$MrVEExjY zGN+VvlIk)aE1Gg!aK~we*oz&Xy~c0AU#DP=-?APZ_Q%dKdw)geZ@tz1@Fs9s>IHak zzD{!KU2-mAO=j}zs>Gy=yp9F?pp|NkYSV~HKkfQGYk|Z1&809E!F|BE`!}?V7d^x$ zB!Q*rJ$Hpl4ofZkNB&>ft@DCYsF!xUv>duk5JTBu#13>_iC`B|2;_5n8< z@b@)e5z=EQxWBTQHw#-^eX?~#*fkQL2)jNOf)52<8D7o@OK@Mdc$fLRoal*V#4{u~ zITLdDCmqlCs>%-@Lpq9q@z!*q0x|l(Q>oVWg(RUJ;W}C;O!7y+$59%+j`l_qNr*rwT$=Joqv2o623{uFx1zBve;~Rout7*n2U` z#T#TOlW>>$t6gH1l|!#j);3%HCDCA2B&i9KfOdm+%Ia&zj2golmxB zy`2eS|1rh5BY6aZ++V-^^Xud9i>zSbd&sx^-vu_KI1;=SjW!oes=c z6&r+$R!;l0ljL3H_r(5~yWXbtvq=7_mK6tD8#B2sOKU5vC+;9PImTN*88``p( zF$~QA%E4Y+T&=Yn&X#BwFHXM${n~-<&!-nIKO1iOD!HNm>DX8YM==$bOL4jo4l}k+ z9eCtmH$)fj-HMh_=+722B3_}bLlepvY)X+qk+#vTl%R$`Uu>t15>0q1ntC3$evdvj zs+9UX`$Cu8LLsUxbWKyRk@7+W34gv*t)wn8M6ll99fhEoHMx?xOi`(Gm>#0GZz%QG zyMFCsUgh4)T+sxYQDH9_o|3|B_nbs^4$u`Jl%t-zl@-aV`FYdgC%m;Ps?!>wVAkYe zC4bSfE59viu%vi6$nD`N5#4>^d_mQBe^W)gs*mcj8)pcN!h1WCoyD34Nm`g~uPBH@ ztj{8ewamWAJ^S*r4a4!ZWSGeBE1Q&NgRJc~Ip(p1;kXC_{Na7!!qLd797xI~Lzu05 z@oHTmI7;DlrbrUq_n3l+3)i+JX7#AD;VK^=-o;^CScQRlx~fW7=|*?cjp-wXN#Hs% zJV5#oTk|6jzWua#-L290A7HZaj<&r1LhtXK;d9!e$E11 zW)K2rZSR~+o-li-ee%ZAvi2&hpTdI*->X|~_T&ec*in&CfxE>)#>C~iCV*uG63*!9 zI_>BNG~E9({tiIqq5cJ|f-y`X`&sC=@VuN;R>cFdDx-dXYh8qu57hE zHf65lu(tEG{{oM@%7Jml{Yj{r!V$CX?fEprtEfz8AprJj#k(mj+h!s+Gt;K>0yJe?&Z6&&kE=(lVy)OvyAof6IrYbMXW~GrlBTOvGP;avFdFZ6N0Grbk8GN z`0eOFRgNuOgEOxybNGECaM_tQ%i0oVR@!GBE02G>8m}aiHGi}41Ysc49@rx9ZgxYI zti0ZTFTsai6AiBfFD@T}df~>9r?2j!i0Gw0sWllMPBJMkyYLOmd!|I7<6UgEJ&3^y}5eMuE zhA6Rm#6=UPdGHxz^FD%{rjo_2NL`=}S&1{9m-V}QlJg4en?o?dPWdyAD$MDdlkjB) zo!)_bm4=%F|1k(1J$-TMHk>DiQ`2d}_S0`6R67*oxG)y6wj|+&Rz`8V zvHoEQvhxuC%rJ+?R1`C~x6{Ov`=;j^NeB6sxHQ$U)hq%u4Qb2jispZrZm7MieM;_e z1p^Ksfd?y2Cpsy9Xmxcm z^t*LDM$F1jGzm2oxjlc@Nrx=EK8<~%1eb|(SuC3BXw3j9pWUH6E|ZXx^x1PoHF!5X zYMqxwiOY869|fKLRkNf2i(O%2^V?y_551G^=ACU%d+hF516w^^_I-nt#Tz;gl0SGc z-D{dX=;sWHjXI=6r&3O(Mm=Pfv`KN~_;Fayjpl|?p$Y}@MX}TsXeKyzT^7xRtNrIG zAp=*Tvqeut*@ie`;VsOQfbTz5{V4x!wPs%5sY*RrN+@T_8>+WX9~Z*xjX4TS z4qK^WWrZfGxRIQg6h0?&u%bqp)#;?pxrN37(jf#kWcA2CS=IO|6)LkDy$~8VbxM;h8_J0NelSA~CCYP$>T1Bl@?x(H@>uV*p9`==33Hl$1wWyF>|K#$7;1Cw z%7v7i+b4+oT zzhNB{-&Ba)iYxDCNla)KYHfW&6CK#MMNLcb=mcW0v%W3wHI0iaDB)=%&;v8BI$ zcaj$@ql`8CMua6%SosAt2LGMQQbLGQF3enrLB4x#*#aUCX3QV#-#?#~u zb0?Bn8oh1pPpC}$Z+CE?kG_3%V8>=7Z_O(U*^qp1Xy{d})Ut_U5xpjJ*b!w;^`|II zH%)Jt2{x6{pN)$gho_}a;MxTP9m4;jP~$@!fz@7%uoO<|h!`}&yvcexN}?DoIo~u( z9W||b51N)kZCB6QDwgV);09C7z5?S>@d_>;P#<5CPEsXHBZaPqpQknN04C_{l`t)f zE?6Wc_@W9;n1o~wj)lt;L!~G5oN2P0)6GuZ6 zHvBRau8|^{3~#*m+^DcI#d2p=iX5uu-%DP*So+}CfGZTpuCTM?2#?Bi8SrS+X+L%E zU6~igGF4{e=y|&wJPs=MXmA#33NDkYF)+|i-HtfrI!a!O>d#3K=Z$hdNN;!Dk1@DN zk!Bn)P^l<-$+bf&&O+Je7ovrM!H+kQN=*4D%$f8^q z<}MdA#M6#)>Px*5bcSNJG?fA{Ba2Kh=C?G;V20vM{4z3sr;(+hYt~jje!d+Z#g?bs3Y}M{d!#B{%KB{( z-5l?1#IUi>+%r^VtL;`aj#oODMB@4tiDCb(q>6ZfyxdCmwn=nq4jmz&RXg8f3GJu> zVlk4)E8o$)=}Z}N47WJrH&M{1du1o$tL)P36<0ID#f|i2^@JCZYVL;bZZi!=tLWWQ zY$+WyoQO^~FL!&HrdpV%bIr^uTn_1pa93$282%ducrs4 zlG3PYydQKoO^d@PIO6g4f!1S^WLDuYjUz38UD_kT$nMWy3<6#muZs8^HXKzIU^aKK zXS`#j!E^w+Dq7d0`1sh8L~Es;YhN0QAnMR(5leDzvrN<=?re-Bb*5GN*VZg{fusrn z^s7!A$}{$rpZ>O`>075SyiIHt<_rQDS)7W;Y7W@1*Q@Z%y*!f0$l|2b!aW6% zWrAL)QZI)Y&#Tzbg?|>5Qb#BIti$C+?`xxBN3FFqtZRsa)H}W?IWcB)D`+t*qkEL)?WTM{O6}% z0F-t9U_}ThGqZXE+Vj1=t;ILPW=ZW={FLKs^K6$H@)=q7M&cX(%)F6ZS_xSHl6z5b zRnG5ce%^i!q3o@xq03k{JiX-I*1gVF=&iPY!o2kEr$0%CBXhceY03zCqh;2U^OWDT zmLve%;Ab0`dO5}5deFY%`CWgfwBF1~CBxLSAYtd=PQnOGT}2=}tWirn(nF%=0_(Uf zAO|kh9B|&vH3Z>17*JTuN>x-x{`BN{k(W=|y#D~-0?%R*oleI;d;%A*J0><&wD4DS zKW&Lm0Q*H&*K$g|xx9S^&>m74#pbRL%2?~6y=KgFCF7sOB&&_r4{0!-J3|y6bkQSN zG}U#bB6>BEhj>O+Jxa5_z+UyzKp552HqzQ|95Be(`jVqGcHk%MFOc^gX5_F&$9frs z`8_b&OanPBx^i(dm-VYXb|*|5AwbEgTpo8XHkNXbT!beJd`%%)kpCxiTLyM8*o9`A z@$J-@4@;2x@pMgfn6ls2?uzM*1dQ#2=*$O?-HE9tT5Zi%EXOAE$F53s`(&dDe@Ie2 zb9c{n*m1gf#E=2w=(2T$E;Bs=AlIJ9y`*oni8C<1(W@4Q_PwM#TG{xYq}`eyKNi-TrhAoxj^CIr!pzQTuCCF3<~~7Q zL2Ec}x1BhwI$FV7d$M3#GFR?X;98L)UvAzTi`eW69rxlxEl>N<243Nay#JrmeLrAL zD0h$L{+GSI7_UpYUG!yMKgMcC-t$$|ZT_tY6C}eGzK#z}d7Oo(UZzfM3C)0LrT(EV zybED>7b%xh$`{Vl%Zqr0eBtkT3Xl3s3$qf#A|q#4cHD2ZMHT3_i|uSX-&M4ZY*aMK zu1guL41bETjS6|ll`HXTvH!4uvbJH#JZk>8#qoQqyFhD&rN{uEJJ+GZkbmT{Ma3_yJJANMOUhNrv zynZe%=qTWtYHsDc5hYz7swiNOnJj5Ct ziSZ$$!NB77i;R9t>zF03SJ!X*Es(NP69x&-tk|*<+tTU1roHAqR#Byjr$r8Rx^zNm z(v}I72^C3{hxrukh6eFxwjay(_1jb*Or)HA%>#4a_5~&1(Ff;Uiwg z+X{^^#0H5;6E*WL3Z%!8d1;-ok$FnN2>CyaR*f@hYg4f|3CEIng}XCb!pvcF>&MOC zFnfNjH-oMre();Ww}wdG!Qqu}(_&H=`HFaRbUf{H(-sevCpy47*5q@I5(-0!dGB~` zkxcW{oqVj~?PRibuQr@Yo&Zo#1@PBBH}44`oedz}ze`UJD_J!jsdGx!lji*)i^{nF zCcv~`zex}$RjWj?LS1KClFpadfNxhpAf{R4-hY$$`lv(|+t%&~KTf9Y+!;8Mmu-bt zL2#txKC`6f;}LLhAzZVl`dSf5LcdPFf?(K|_L*}8SH0wewg^9zoO#@^UR^`@_x~TR z&N8UYwT;%H(9#yCxEGh=?gfgwyA>xuae@~pQlPjL3&ja;!L7JkaCdjt?32Cc%zS6g ze_~AXKJUHmwbmuY?iP{`A!WVsG2Qld8^xoCG;6f9)fp`9Dtc@&u1|lgHYU|gzf?4L zH;<%cB}tGS;rAGLv9}0vjmj3$XsfJzz!w>mu}?2zpsxh7ih5w*AE_8K-`*Mm_tS?g zgMIC2(3rX72&1>i9%1nD;yohzY_4X19>UuKIu&gaU~>KpbUNXw_rmZ<*T)~oAbeW?UbRzvE zesJ~)(EeqBTR=4UQs7n?L(f|zAnnIC^0(zaq`=?+`;hA|h;_T!SK^0;cBx-sKqh;l(~+w;+LQ;xtPj=UW>XM1J)GTpX;rwlE%R+1aTzxOs8v;NAr# z=oLw5c1cX{xvC5ouJF}9N7&3bY&wb$#R&J;g&gl#yq8!>77!(T(cK0fRL?*1SiC!+ ztGx!okuC)JRDbrUK>0EmfJG&Cg&m_w*5~zk#j8t&IgYQhN)tcDOE8I<4mopYen=2) zKIa_ImZkFm`pOp&wd}|0lJ>qQ(pJfEO>(GYgGbKY1jz6;onH!6RD9zfcERr={3JuK zFTc)Y#JCqjRESKV~D6_z#T#STKax6>q_BSWbZOh2#C$^+yIVei1e;|g}wX9OT70_5pt#KN< z7u8MTQJ-yvJ8lE%x1W4x5e!P_n!2Rmh#)FKuPG!X)1Bd4xfV=_RMadv-+3AO>*8j1 z=X#)n6JL06^r;V2ARFr=!o=`<$*_3RPerkK86E&Uq0 z7LVUv%Z+tHRT6TXzy-Kqep!!RTFVUMN_ib(jo{*H(-0gl`r1_l>n;^Z{?M=&st+$Y zP@`&XaK|YxO7I+P3X@#t_|>#bOJiRXylkC|cKmgmjdJ%D#E1%nOp8rr0|570)+bIJFFc1?-3xY{Z$bn!IUpr?bExz9pit*aS zxS9tU9L&x*EF`VMr^Nt+5S~ADxZI-@0Lpee*PLs%=TuQ?x7Pk z6KkwBZG5#uYU&4D*{CRe*PT)fK_gB^@H(N~46@rks?yh*QreYGpbCbQRE1rGQ1`%O zH&U9Vz*VAa@pyrdX06xzxZQa}N7@D6+R<;g1GV(qGF>&{sOMX}P@$CM5$37p>g&01 z_QL5pVd3H5vrN{}g4$zm{JBla=tl7tcBdnMWUA-eM~HKj($uL(UwuXmv3qIuO^~q75c)UuamfLr5qER+6%uv*`)U~E5ync}D6g*ff_=t61 zRBBJafBWX0c6njld@*1sF2E^UefCE%W5p_Q45;paHUX5=5IyQm_We_itGCukC%n$c ztNJE6z}4sPXQD-Da``C)i1AX#PXPOJI5`qDlcrDXibZDr%TdMkhhbDLUH-KVIAEfo z>VN_h##*)&Nt}K|fgSOt^Lu8{QdUQnPZ|%o!DSK@b|qN-E#)0e_&H?{+R3*~cv`W2 zFj4yq>aB~O1X@T!oBZMZ^U*|~*+*GaMyb4xn@f%YC|M-t+wr4`jpQ2uGSrp4PX&Ug4A2$x?^dF;HI4sHL>c;D zTr!yqS`}B$X7{cT6fmyROh|CT>HPNLH_rHmw9=PDHXXdGxB@oY^qZh*x3%+#gSE9r z#1z|quWLHT>`f+)m?aS5Sk-W)dJe->M!kkHS2wt{xkg^`L%#cD9tr2p&wfQd%k8;A zKL0xN9P3&2c-=Qv8tAY@HAMlmBrhs=b>r!SF+-ZcQVkqWhi&SF(<1}XiUU@}yS&nNv~c|q=XD~`hpHwj-q)U>mXu`Swr8O( zoBlg;cVYp_VwZXWGEbPomuJj;|hT?^D8;9;%Pd-QsHE$vznKJ3j=o z!a!1rI`y^_r&qKVEk%I!K<2(OXcJ5loFc1U_$;n>69pV3^!c*Xx$=E=^zW!-#fgQ@ zkCrAFNLZq-pX7_^lktfK1uZ1REKTv@*c zGJ8QmbHQ)TqkV$0rdmFk`2#P|;L`s9o*X)6Yx@wQ<}NVxKVo{8H)_4FpXniNpJiXC zf4FT-ycbNptNMTqDZJ9$oNbHF->+eH2T z_oe+NY4rwyy8Z3qeYG8Fe(hgAl?Y;UJa_c{HXOJX4@p1fYZxsUM9VW01ZDinKY0k+ zn|QCm69P-RQS5dEI_oE^FQ}ez!WOf+cq19@*wG<0B`jPC{1z1$#@F;ZB72)+ZFsAm zN%fZsM~vR2JBx3Si1sSQ3lu%M6Q^bcwDdam7CO!lVGk1BE1J}STB2CE|GVc8&$f*x z+y0g;6C!!Z_ZbdX_c}7tE87D#{8if@9w)*YL|!e)E3@=ys3K|CwJH}2Y&30A%$Hfw z!&Kcp`yK0L`R$)C<-B~D1d)+-qEEm%^j5L=S z0L9f%mC_w{RQ?BmtZeSFnZ;Tbi7y|q9z#SE(8#Nms5!me108htwL`S$W^zot$=M8! zeSML9n=8ij55N|rIS5~Rdesk45%<`!+zVPO05!!}DI&9ZXYmvxydSz3h-|SVoWqv# zJP||+nibiB{sT}6WEN-TGW?Du&T(dv5Y6J-r#wVL-f;Y~-lo|JMiP=~yLI!vZK8ka zJ~J*OBwP0(+2!O2*nCvp{mi`{M4wrAIVeO?S&YS_>U*^Oj&QA< z=sTLAar>*Bu=>+I&G_A^kxR;S5jg5I3q*q2s6wYPiP~IUil1D(M_2i6>B{dJe=L=k zj9)eP&9_X`;u+S@T)_hF;?r>LR!HyuNLyY^anx;8bHx4B?Cb=Jq9N~q3dcxqEL^xg z!Kl89VYF1Fj|sU##mlSLZ6;D>e-ZN$m&_s)4h><-xV0ygj-a9%(jVW8J-W5-J0fKUOcMA)__Mx6#jK( z(3Q!UQH||wUSt8CZz706qxym=$u1a_!2bK^1}E-2kQaKmmsN5<@B%{A&DBQUe2rvC!k(kT45Ivy|sm+0Wo zlO2Rj=OL9m?4A-XHT)02Xc27wjGfY-JNH9kOZ!HqC8}OaRE!J%DE}%wu?d5 zWN|@tkNx7zrfSWC`Uinw^u&8zX(4r>W=gqtk)?9}(VJaqjg7zS7m<;5-aaTSZb{GP z`OuL#Rj0JCo?@s+1{?Opg=s0&QHjdrsNKH};kcyu4Hor8nTmY^Xfd+Wkz=*Zj#;>o zzgQ?LsWzKpr1mikRl>FEo$}y~9dma+=#_ZvYgli1se$s!~ilGJ#B`1JxAj z`=ag?1C!L-DC^&Yt?Xl+(PU4Wz2@c$WRnD>AB1Xm;sZ#}aV{vw)+{iI?KwbC(~;uJ&p{RUe80XU{U z&OuTGNw>YzV$TC?Qs!Dg=AS9D&*$LM58_7~9SL)xX@P{>zG+_P?H2I=J!opUo+90rNq$BE5bfo3plzZD7kMrfZ>|sBDJwU4RNY^ql z8h3tQgxtQy{_q4xE0XIVxqr0t;F`YO_a{(+$QEX52bY~ZU!l{)Jru9$;BI!uY!sEH zdZaYCPxqixQBYr@1PZx82#Fm$!362!PXZ#Gz282?_|3yYR{^E>WSPw(Qa1KW=wdfImFr4mtUc}l;n;nnZ?b8Q`vysu z%s;S4H#$~7`Ptu**5GxSui*$A83b7XupRTF%#sg1q3j-E&DS~r|&dNGy5$r-+Uw5*VToiRL8m}ispl@FaLHk) z5vjzlvoD(1b5AR>Km_9vSAjq6C+NOmg9}D|*?K;Du+-(jMtl1pfQGL0RJcuvF` zTrGkkWM(An`sI)cRgkUr7k zU4wo|P2ozx#Lz`UgoiDgWw>IPlH{WrxG*|lW!KZ`DhXTt?4hgs^6$b+ASSJH$WJPgZ)y=H@S5)Wg{Qoc&58a;otl? z-JksHAmO_8e(CeGQ1)zH=Wu$#bF@pGeOBw3Z!g;Ii>l$waS;^Ue+*`$#GAb^VDth`RZGU$$@wHLlUde3GR9n!I5s#v44N(p%o8{^=;uaWNi;w6$ zl?S-`PHQQs*=1~GXp6$eR3rS%NH#flA}0B(vjCRHow%NKB?su!Sk!2 z@3~?{0`uiftuvaP+b2u0sy?fjEEezMAgq*{D~{TQ&@g>$+L)j;q_HVk8s7O9@RzCR zbV+#vmM^FBM6v1bZ1XO-;nI~)PT2!2iy!Xv(YP=V3@$|QyKO|*5M1|;Kcjk2Wb7*$vI`2Pv{TTvT5 z6=Kln`=%cJ;pQxj8CKobe}%Ot$gUJ@*}T=v(isFPeuRhv}3pX z;z<>}v3#1=O;F}3Lzl#3L~xB*0Di`+P)DiBuOb&LK#$Av$uZ6?THB4Gpo{QFQVW4Q z6Gla?5GFGD{o`d|mQ{%lIF$=rJbmH#JjL2rEuHekY}JqqIo6$ZS)Tyr{DLna*iX5V6Wgxl}>|M@sY+CH`vOecX7_aBs;c9HpWJ zROf(v1mmr2%m-?iHL3nAQ7V9RX8iqQ*ykhtr?;LAOVg*GL*dSyymyY-G(hmjt>Iy` zqZhtQ7OMJ^<65bP?<0D90>tB{<$eYFPxA8pQYTE4?yMx~^N=m!D82HsuMOV#xvriZ z18P3bZgUL+WgK^24lukNQpVpt9wqidbvn<{a!O_105gEN2&|k<+O^6(%Px!kr--0S z{wIRPDDvvX+ns$e=t*CQ(gWn{2Lnp3XO;T^I3~2V(e6iw ztu<0A(Ynp!T&!esY0lAf(SQvi$~`NTm2c`$H^VQ8>2zYj#ZKi{;L?ZXl4#764o&CI zI`!v0PyHOCG~vGQh!0+!AFkIAqotQh$Tu_dU(IcD;k>(^Kl}m9uegE#K5#$52HjE} zX4`-NX50wCnaCcW&5`cn+xKC+%o}&q@4mmB>U!$c9Au#hOWX;-5{FkCPhSTM7T~jz za6(UnrYJEERYg8sMBoZUn&Ag>J3peosqndscK_x^Tw3@m`<)#O*zD1RTPCXyQ^yGH zE`E77l-JuHN5RI#`ugr@UvJ2^u`55U zrcNQHLN~XQ8zd3t6*Z=9Yhs`u54kBodpWTnfXn58_~aEI5_w; z7tkQxoo0f`Jf8cj~sp%3yKq)x%@~G_zpfM7V*)Gi>X9vcgn9d&8yRoWhGligbVUy zz5_q+-hM7Zx%(^1ZCrMd;L0eHE2kIcC-+yvuM{axh_WkH$^(^H|C(i#x`Iv^Wy|Rm z#)!a{xKhZ&qlOPj7i%eN$E$+p7HUgbhl^W~#w+34oO=&QTWsWs zI{inw#KCy{&Q&4ADM_YF&&8R=2i`wLY+GXJF@+UnUwpv#hUpJiXIP{AW6Z=Md>>nr z9nC^~Bh(i^rwL1uz50A3EE5o1m88j;&@@XQ%R8HwzhW{>qGu|-U6xSwwv6!9NrX*~ zY}>5f|0s45!tmBl9bVxg2$Ak0Ep)N@G96aK1FemRzJlxhKu2V|5ao$VZYCj+*A&** zqL`q?xruueKaQ_SdDt=%n~@IxsHjUy3f=DzY#dHY;>GoQrTA!;U4s z8VLB+Gc06K<{+O#k{srj{dd)yGFWCI)JaNFu(+b8&4yt9phubuRJa63;2dHK`vdh6 zF#Vaf74Z7dnRnGY=rc)*&~1)|L;Wp`xu=N=4;3=*qOTB5dpcRi`5|~GiWmaaT})!Z zU(T5{bVdT~5uMx=y;l!umDZ>`WRXvs$%#`#Eda5@rH=yd5JgFnynA28BgRe9o@t$Q zP(Q1^;y~w+kp}p6UywL*cehigjz#KQcv&k(beidku&V|@$C;hrN21JnG1?`(0k~@i zi>W`4Go`jaFD0Xt2C(9<_NEMV372LQTMa^&ST zP;YCH{bO+O7?9`q&C9pswYLSjlw8}LGhooj%!BN7vvxOOlICAO#FmT{F(Nqt3r+@XDjof7eN@IRdUhJePGgfrpQj13uJ3fGf>GR zBlIGW(u(YRm(DRYj2)QjMTD}B>$xYm#k(MrtdQ!gYx@A_g1qgE6}m$hmt>s1(#3N9 zWDbh#-CDT@w*1yOkTd;SzqUpzsJrg2P|%a66&JS+?R7`Yg^XD?c$l{ezcG*ACcEYB zK5-ZJPid~LoNDDS=(pk?wE%L){|*BM(fUNk8qMND_^08gRvrIQn|}olDMKut?Zk7627b2;`xWYsn!-xnLDff-Oj&% zdGhmlLV>P3&Hs3ge|G`al;nh{xx{D3MMBk za#Hdsy{T>{%D}iH%{*_E;I}JZoP#F9$cQy z#Pbwo(4X9xtCKTNjto_wi0|W+cQVS=n0@B90wT)UCxnTjkxTcI|Du8)@O5W*+4y3a z($3+3k3|IET#EaMjOH}}utos(F`nP#I@M@!w8)Z#lgOO#k2LEx^CvH%8_b%{?cEm! zu6b-W%bwj0v}6?5`ma~FJc!-*Z&gdU`j!C8hud5sL2>yuMU=ll0>z9v_6#dK+F3@Q ztTYQl9B+tti6RY#zNq{IXui@r%Ro-q%O0PYHapVH(|%IDw@{ixitIB#3pWf9`{DX! zI69cyRDxJW;X>?vflyL5>lfJ7$8ZPi1plU@2d4;KBxsu=p_ z-@~u_VtLj}5z$%ZDkE$Olo-Sh9e1GK+9uo8&)x_SXuR2%N5n`t+MjDG^Y}|HiNF8+_*?g(O9TJLM zaXJkEeI3@Shvhe&Uq`3g{FVl1_`EfxVg!_0_*q3*lQsbIF>=2PwGrxsYsN^wJvWy0 z9Cu_xiKp~)mN=F{Ftd@-dP`rjH#^XQI2Y|3b%O(N#$63vae10p$}>bw^+T$5(Vt<4EtfqW>= zV&*ZbqF7B8#M1q49xM%CDjK3F;`67>c7I!RJ>ifh z_c2GO5|!voN9m?m+=VPPvd>f(e|IrSMykhsd_vlW{&7fT1mY_fY}i>KI%8NsJB*>+_I`Qk$uQ` zbdf15S7e#9Rl&hELi=jJ-d^??J_(%txwQU7NcCLw2H{KB5B1?Jr_gt>{=XT!e*pi6 z>{4g`xCUCQUt#_4^2MI`eA22v`@Ovj{eg!cKlg6|ZVJQR%JjwB z;_9-|7l^AffZ;Ugz<|L*eg#43W1_%dW>8{Mv|?7Zh`cPY(K%~6VPyo)ABo|vtgeAd zM;mPo-hSi~PvJ7UMy83$C)3qR(wNx#LBmSJ0uC>$o;p6e0X}dFLm1P>ddc9{sXb$L z@S*uD5LEbQUAfHZuIb0tRF~ESNI&rl^GS)EwrTS?G4Np4Elpmmr3S;jew+#1dtP#J zcAC?eNSm+JB-Ty*0vznMWBGE;ae6*|T<32h%66qaO;4vz_b&d1x;Cd=%kC$fc;>B0 zFUIBi9RvP}-osP0Kab<`(EX__k84;S&D5;iAOLaz4STzr&HPG`XWyb*D66IZRQK$f zN@E9Si<0E#-jd)^Ec24cZ)FZQ&ts9hmSO>AFD99JT+6*HG2||yo#H;Ito-!&B=56aG1IGyHB=F8|F^(ZfaiCSXMxj4Ix>&FXO?~2 zaWKCqk$vcNpT!M647o5}h=4KIywS#)Cf5AGlqi;px+}R;hXH~DcSpa9#XS=H7IhQv zgkEk=hW$N6bNx5888V9z61K1+`+`9mFO+(Vi9heM{U^MLOTy zRX3HT3}7BIF(_B%$yMlPPT$6oX#9sE8bGZW!%fUmkCz~;0QL2zmmL z?(x1=wH8sYZo=wAp-+St>#_)wMB%%^{wvB*57F^Yvtb;k2<*uKgTNnIt1`Pd``JM2 zX0Eq)Zyqo)r5$DJiigwbWK`JpyAirCslq=1aBARxE8j!-Wa+lu$+m|Af^EC3i}Z7s z5+`sQ@dK@Ac>yjXB=OKIp?yD^01AX2+n0Sac(6POiDx#iPMYOFn8f_~_fqszNzAuLLt&KglKl`ndzV@D z#2Qhyqt7vhznyY$x`zG^qq%!ptg&@w50kTe$!3io$ghNqgA%5m)aJk|U&j$q;GXKIqjkClhbz0fbc+`v87$j8|V`?bqT2O-(4X`eeC+z-;b zv0qM9nG1JSAUw_1$;BoB*l%<1V1h-WVg}-qsV07F&-U>o`MiyRJN*5*jQLBp=Y}6ZEa)%O}Y>dnJ$>K+q1y`+f3TK457vRYE z*=iwOu>A?n4uiPn)o0S78}e!E_wC6|@;h@)A-F@9!Bdeu>g`+o^H-;Iu53jGx5* zR1cINl)Z~6uh0k8{{zqstX<)Sri)GdjU8$K^S;Dnls!;K*^2L_3+scOL3BG#l6`h- zqmEiWLQf)ovA0u}DVXH7Ym)5Gc@}^M_jffL>GaebFOT?Ei}N3)uMDSMQ5Y*YWj5(o zTlREqMWgbn&ySw^VEEdA@sQG9ega<(0ujdv-hVcQ5l5W`R;Sj+DEvh%`uM#~h)mMM zR}$l9W8;YJPlPBJpR1;m^)Ck&;5|_Ib;o}TDVw~1z05FVWIXb}pAn{4q;=@c9yS7Z z{TkrgV|tjl&$4Z@XM6bB85;#Co{{}&doMF&v4iYKD&0STq(>&xY?UJ9{3G2|Fe}H; zTATJSZvmZZn3(<`$}C@j<@!+cmPLW5N8yJS3V(Dfg~kT7r{*k6Pn~L`wh_+>y6%?; zZGiP7xUk)7u9T74Nx9d(J-ix7Vd`D*%h#|qMSlJyl@8|vCm%@UbdOTuDIFi4CyAq2 z1a5mGyTJqYFAVPg{Nx@w3Ds)!{gWuq0ct4jMs#-ygWE8Dr{{WJT%&@2O&KgbKKCm# zE5-{O-C(gXxMzIj4hr>iMY`raZ-qrVw`cttW7!mWO;^`S8*%$P%7<(_zz?o{lgX(q zFcxc!m@z=!J+ztjtT9VcEkYgP4yUQ4tsPmuVPurkB$roYw2&dK)CC_OcVXw5JldkQ zE0N&UZBP4`!v3&v#q(EE_T@YgViSkNXn|gft1N{2>-!e_3MWb)JuX0zf09Z9JNTk5SeVoLiJ2tb56dS;Rt5sNqY z5@N4a79dF zy4z<|&pDW@O_ux{f>^T|O|s3}$d4d4WGnvwVB$}^&27=Dlt(juzp|)z69za*RwP_I&Q#$n1L*wn~a5h)aY=gWJ68%FzU zS5tRzI6LBhE3x!aX<7qsM;tou_hkM(nmX<-0`Jq2pG-QeUi`+wKTnp|2@^nT?F_hf zl?Egb{KifnHJ7iPxIKzs-)yk6J%fs(WpyHYqnC%kL+nGZ6|<9+QjpQ`v4BDk{i9YB1;>q4#W7zY#z-Py@3 zJna+Kr_&g!9w35ez1^%z(y;kLT0OGQ!X71(AIWE|Gk2!Y$p#Qt%3P0Op8cVy>t@NC z3?>ztB-+fQG}_2NBHHW0!s9IZo@=zxeK)E`Pg2DTbNUYFloGw%YL=%(&xxTi=ItNw z&bb^CUJMdBf1s49XjEjfomgZ)-Ipa#F`r8JQ(>&oc5=i`Lr5?7!^K&3UC-5yYk9~e zf`hbugIW^y2P^lq5c~5b#UE!;Wq=zYA<&MjA+dcrR0&b925?oyLxRm4_j>@pdE3$N zTT7=f{6#G3FtKQ&)lhwlmZMta5ao>BSW>Is#We5l*7sXkH+LFgf8==D&&Sb!aLBN zd!i9dOKf~{^~x9g0@+`%|Df*4!=p@bOIrGqK4w9!5r;>;I9}o`0n@u*$se@ss28Je zs>#rM+ZJTPa!L~Cx#;k zgJ;>zH*qie36~x$h9wqBRhuXDn#ji01BjQ#0#{4A@(WMhbX68fYC+wy6Cy`VPUQul zTsCU`u-(V^`{j(~Kl3EZl{H{Zn(`ME*;_;vluBF%H5`r!0EKO58K3Bo2VK0}jEUy6 zt^rNGT8u+NzjcdFQhw32owF`;341${+9QR`w(LU(X+iU4q6%Cpic+#YT(R|C%ZUw- z6Dt*F$;USPc^=2!Cy9@``lwQ#f$kj!fQxcBl?>&JlauEb6P6$P>Oc42AfX;a0#2UA zH|q`aBXP*$E$PQulY;$60ZyP&eG;(}>I70-nC%*kkBZ$hYU#XH0`PeRUiCH-lvCJ@T|h z!VbxtD;D;BJ51g)^kZXNGxG29iE7ikh=VT{qtm4I{WSbN#@6yZp70N?RuRlq5O4hLC@$eu~|R$=;Ht`+z+3Jt_Uc#}MRTbwStGifd#*8Zol%!RU6sbyYyjo5!pN8uGC< znPIK;BX=PS*P8*)(F81TU*2^x5MSqQPIV=blY6Hv%s+pQQmJo9ksp0_&E@=&`_p;; zsjLxQ#+&F6i+7xHWucU$t3~0ise`APKhgt(TPxV+yEI;WY6@2g{t#u`ov%fr+Mk&z zHV?dX8)LgNQ;-$Ax$;LFnB%lujbYOjso0-$Rf;y2lB|U4evP{(%4gOUbjG#U>xpL8 zGN0dy&Q%)B_8IldUvTv+2fjZ{|8<&W!$97-j4x3*IuWqNL)Ze;z>%_^TdymaeGmclhey6A0&?L%SI#T=^DFu#2EDcJ)X(LnXzG#*FP(J9}4D4#o2oyQ&+5A9&v#g5!I*)_!wzgu(zD(}$-HAGe$2sUAJs;l#=-d?Pa z4a^q-7BBIL*)E5FOb++MM))cb1PEQ6Vkx5mIEx=;iD!gniTeX zb2d{iBNi)pXnkl6Y7K#BGP2u&Ps}&>=>*Awl!8$Ph2gdVm@^*o$Iv&>#&8wPe3j0U zYK9$_qY1F6(A?jxi|c*Ogtj&F^>g@aiK^5zW;~EDH+~p*ki7XFaXu+nSCEpMLJmM7 zA0P1o_<<2dCGhLD4b5l3%<$ ziKkxfB`;4Y*z7!v?%pr=GxRWUJ7<j z9`|X9O1r5hwRNo9FqSM>g7AihFv0qa!|{$ht(9o!4MfcW24=jeMD~-O@UT@$rfw@M zC#4>yLc)|)+HFv;sUGCpJ`I0<4fBgdfF(FOPV4a;J3L~Zv0hMStGsMzXJTE-N4ma? z0nS$ow+vz3LrVcL3fI6z{JQ)RZ}r=o-698x1(y&0WF$Qc6qK7Ug6>(?cccdWYV@G$ zNis7oxL$u%g+f(*QF&NJ{_&m2QIF7mLYJ_w7N%e~PS9Lt;A1IcchjU`6T1hIr>a;3JL$1bdc5K%nHH!M&E{9UfzrYuLMsIP`AL1MNYO8(X_g(=3S~iWJRs9srMPbP-f3Q`$ zRdQ%+K`3)Ap(T>kydSRCw!TII@KkM_R`XJLfFR&$vxcx^e{K z7~yLl`_$nlnitz`?mH#W+OBwJT6j%=fSp64)0y3;>sa;eE)16(O*z=_$QuHM(&QVQ zwH~yiN44slo0P)TzsM&{EWjv7U?076jN4U=JI6L%`2$cid^4tIh{fow6Qy7u*9IGD zkQ*Fgdnm`6ZNUL7`rz@6m#@R>PZX(cqOB?FIkMbUUU3#XW3Ko$LI_ka{sDv`XG?*= zONJqGyQ=p0g0cs#b1O<`DiKE29snEQ;O{ErSs@~QT2?R2aiV|aA(CMGYLFpmDL8&y zrH#dd6=k+a-_gC^K!bOQAP)URJu$Mk!rEQNC?b;FX>q$bVn;`tHLPD?x8QG{-fVQV zD4}5j7K!a+dRP2Q%7&HE-fOMx?HA@{M}im|F*~DMRZ{vUk1~6m(UOIEDaazRrB*F_ zD;`P(am_o)A+n=9QG*?WHJM0Z7aD3RQ#S6p zdQ_#kY+s5p?J-}K$Rju|k2h5l^!@g0-#)W$;$^}@(WcULXjw1nNQQkEX!F!qQ71|+ zXjRw^CtX&jJ3)wXuT7vdQr8$uXb!DBseY(oGSO*4@#pj8GFDFcX4#lR#l=Ei)BQ)J z@Qs_i5AbGv%l@Jf8F7Up+04n+bW1Q)Nk%-9$JgIiCR?>dKwcJID9_XUnwL8=$-zz` zuZYcJZ+I9Za0A}R5bGx`ua!mU?pm3H$Vwo-*OkI4?#7cReeM^|bup{mTS8IJ>~%%l zNP}VOb=f&&0np~&JK0Y)eK%2p<9L2bv%LF@V_lpUjtoOO)CRh@D@*6EYQfZ+lQcd= z@7-SxYE?J(y6sMjqSPcQBvQV9gEEGfh~^{Z~g%ww0!K2$Y;X5qZ-5VTGOSnK79Yb z+)Dz)&&97Qdnxh7gZ)rT?!#E5TYc$du(^-1nx$151)dfT7Qc&N!Zzwm>+op$=X^5L z$r@yj`-T|59JcEYXKh!wMI+d|_V(8D8m6xyF z5b|}?Q(K@8udRW_p#4#hQDIMEj!Aodq3pMd%Y&8QTH+IUf|Wwm(nQQG7-BlIT=@yB zXY4%K4h)p9y=VtT{vJ(f@@24vVmW<2EUBr#S~OV<;2}bL)U6+WB4uglcW^U+jnD=;HIOwVtj?x6JWaU+f#P} zo!Kjp$5+Q-EmwV4?pU8OTzg%fZDm};gA@a+j>V!NwBjBIVV%UJ{Bl<^JY`nVFP@Xd zea`ZWu3Rdrhrl=9(3Ra0aqNM>I&BF!wzQT~%y2g!=crwA)yqgF#59rmk0AA-8aEvO zn#)n{@>8_x&vvoYZUg@Lx`+2GD(Ef)sE-8ztMCpgtZ}IOWNzW<$PRs-n8gg#FsigD zVbjhkzR5a%_`?l-i&1$l_fC7+z8IPPw*pYb*gDx#eo%oVs9(h&36=OnnV+%o`m3k1 z+#~zu78YjKr^QpSwHplqC3WRcp7$O4c3?9wCX}`*gRfM5XkZ@3bF{!q#im2#kQ`(2 z`K=XIw98b}j;3UiN(_8<#hm3mRUEb~nN0&exFyN^nbTf=vz+oI0&IHw!&lFl6WWM; z1owC1R?)$a$(Ff~|8r#Uy{5)DtdZFWnE(m7;@vu&BCKI{&K7LjU^!~ns$3}Hacj2= z+S}UUOq^bK9}i&SOK6$*cbtZJZ=R6T18r}FwVF`a21$W$MBiZGBqX%TAo|kFA@W>n z2laur@r8{x)~{X5N(9G?OvE2&ct4JkQiW>2|H)-6t`teypeLafjsA!1m3O6>fR#oi z%c6MNnkM$chf`qeN`hM*T>F5|BD5vNEW?F)ep&E(l=H)PEc4Hlf_zQP+1X!aZYeZ7p!VKDM{ zM@RZPNj7id%h9^*ci)uf8NVBhWEUb>_glvn#Z(4qGc_q3WXmh~RYN0gj9;C&XS_Aw z^N(1HeC~EL+YW%1oqcnc_lPgrc(@M4IF#JeN+U4GIt_|GLueI!vNsjc&0L{-YFFIv zAiP9bWMIMbjYQk&t-%`^%BeP84bgEe)BKo+>nLF+tx!}j9wWea)^Oj0@s>Cc zov?OSZz+J|E%Id%5O3WKRNGx2mD7+}QuzsTCx_zJ`C`9*BY4P)7C;D{;xRT5zW+Y} zEJ4%0;l6@+j!?kCcP}~IKAx4?7ZcB^C$c-OSK>@U()D6ihG@3=Wt#=Pdt=(Qylr!z z-a4r6p_*ADLZ(Ff!_uA8BE@^{TTj!TG`_ip29xfGd}fo9TY%ka1iRA9j#e_WuRI;6 zHJxblLqnqvQ<9>;T@D8GOYrUXtggZ-FNg0qQI+>CjE|;k$ZhP8qKpz(u)6+-qTgze z+-i;%Z~{bk;1iCX#*6ao5{i-9_)5Y%dr78q2@oc1AW)eaZy_% zCXrCDx7|5EjV^%O=q`#bV)4e6dZWsC6qwn7Ad*1A?a=Z4DqCw}J(`<*+gSQK$IHM0 z%N8cJQMTuqdywAGWovD6F5O|a8Q%M_N8?d0RGrH6KRktONWJI-+x`%U^)C)bZrR?B z(H?Q%cVA2qT(wi?x$EGPoGgybtYFh`me$d>BF07rNGH?1V(%w&z7UNyYa5nk0~)JE zByyex)4??D+O?Gs&x<^F%ZO z`T*Sxa~5Oxj>u{{CH12yVKgk5KH{aCMcJm$1hvp&ySIV~o$(xgR>8(V@o%vn{$az;zj(;_cp38%fcgK8{E6 zel^BQ-cQfIF+d(-Vwy>ip<@o;Gjd3*HV?hJ zLBKnian1?Jz|Lp_{{Vq?+us1{_cOp9ZDeJa%Z)e2Ltq`)JZEq{ayD`XXanfIOU1fA zq2O5cgpp0H%7P+Q9%Jerr9(Zmq_(!fHxP=R>?Z0@ykYP_g+>gqty=LlN9h9j1IN9!AztZh2 z?mVTph8bqa-Z%-Kr>9(Ism-|Wa^p>3V^ZMhm(al0@>@tEQ5lS!4Vn2*;7J+j$*YW- zLY!2dgq|nxvg#ffn#vSZGlc7p#=4|DRc~z0Ab*R6GLcy#@C8gm_%%Q^-9=IKIQBE#e#gjQGy-o_h zbU!LSulQNvYcCFXb{TA>xOdbcisElIfdRH><-iympIZF?05rx=6IrRH?zWfSeWqW9 zh8~h}`&MO78~jPO@Q%L@pM9p?Nd%A?e$a#fTe7GtAb9RC2HfeZb*J21TU{{{PKN?8Jw02#IO4F&^4E@xxnz@FJDX#1 z>j>k`8>iI3_<7>55_rSKcUpvTEw_c^QxJ|tT_VRRq<7v(zQS9@i+b{_*%=vejS=y*)9?E_-43=%3uL)nfbB~M+4HiGQ4E))sli< z^GW^ZPGNPpT8+3A1t`VU&pExj&uCm5NRz980gsnxW} z1dzW~Xue{7OL|teBf5T++o!20Akj)}6&;tN3hfhM_o_)9o#{ z%LMXQo!A}wAHt$~qk0>jlX-Ct(jh>o2oAw=Pp?Xgoz^n#ZsCtvoGyTU_8J49q!dF2h6gR<<)EnL|d( z-3?_{lB*X7)M?r1V7%~)*=zajG`&n~65xsgAagtl3 z%KT5M+jz3}=6x*YH8_pRV{<9{*z`X9*A_au_LgU_m(XgR$7y~qzO=H2((W}STQ8Nt z)pieR3ZVlcg%Zp#xp=3N8#@m_=Y`VdGGBS?IjpN2>>FK(~SPK z0lTYRG|#=kT!40-qJS>=3(I{<>6t@F6cA5t+)xK|BW67HpbDgtFf-DCJWXzr%E%%p zGq~lGJbqP<<+3P6lvfu20Naw^n|8+cfymkqu;!h+2*>dcgd&b(K8Jg6b7*8>rdJ3; zo>Y?DXB-jNBc(28v}g+2ZY8x5%H?nEKX2^L@26&pOO><0e-k2Q%+h99R{Hlwbt39RWhOF)o@SaQE{R@S4~y2nb=6Nx5~_e zag9#}!j4V{IIgPllqt$kS7{i*rzDx`UJJKK^?Rkj0VCR@&}3KS7`Zna_h;Bu(wtH} zQ{pGXop(<0ef{p4q~fsr4^s^qb*IYWzXQd^;pFN%kXKLh zI*$o_C-F|brmmlRZ=(2nNfIEq@?GS)atgT|9l1X)PjAB&?NG&1uMcZQwzf^^ak_3U z(mh~WTEpVVw1~VjcK0gj0luE@RWe%+S=6t~fs?=>X9KClb4Lk>iuNAMP48_!{{H~h z#?Et>?|HTSPFKbM004BWLoN4*wasTuhI^3L7Rf&7@azEE1`h;|r1A8wj9w;qd_1aC zif$|LMi7FW(v#fZ@Lz%SF9eD1tdRYxKs@`&}21G7oNg z;A1?Rs&ruG&nIw|TSJx#-HNx(Z+U8wL29zR$M^353o7K3wZS-7H?ySvX1H? z!^n==&Cl2(iZ&%+kA~a}46|oBKBu)*>0UN^naXPS8>`%0X?7RUrQ$S?1Ei?EWRn;J zZau-{)OW3E^2(cw-5AQ8rB*YJ%;grp;Y63 zVG3~T(3}zh-__U=$!Kd-r-I*P+MN?P+P`CI(c(Ve| zMF4qk#H~I}CtZVBS#xcB`-vBBHaHnmp7|T71Ip*Hp8o(-xH^g(nyn*x}S2aa_ z4%{o{yFK&4_E7j!M~_Wc^A-}=V!LyeC#T~{J8lwpmVy5O2}0^xi(2W?7i2hjN}a3i zp6A-5+H*T2c)=xk9IuQ%Am8Z!0BW(h(SA*zBcy@MzW5zJhLq&ig~dVZa|8YnZ7;;S zG#ZHCZz)~a9;3cHR!LnO$=RMEt7)dgUewC2B72rpKA?5|YN|hVBeN@or8##Usz#~d zc-J{1^Bp?{0-Rok^)-e60Ikj63^Z-w$J`GVxX-3HpX*zxd&E&s+3DN-&pr`;_u8uG z$_%?I1_xTGgFVaOSBPxo(V@{ygkQzx$+W4)&A^U&e-ZqvixCE=&Cv94wNrwJRCm`R z>NS=`m7*t;D-|k!f~F}QS8b5REzF9}Bz8O>G{^|gupi2tl11IEE_v_9Eq2ssvgvtd4acuepi`k2eq)arQF8L%Q^Z^rZAcW%}^{0D{#>BsDo67;d>EowLrJ^%&O`lJ}bF6A!XOnL< zpf(w1B0k+n>x1ix`1{k2r`LaV3w!5UMAPb$!2_dw(5jX!4@@?CAEj$b)gGH1*qZ*v zI&OK#jJ#Dn)r6L5HX z)ML|iEknb)KAU%NsxHdH(RGpVenm19@~O(NADFK;E;5{)H|Tn^l&MmRsk7g?yAOtC zus>yMQ3!~iE*xWKMhc%^JNN6}yxQ1@88tl_)lE}yP8$*3SS6|nE>K4Z7%qA!_pWt` z_KwuqYMiP`MJ-smj-dvrbrV`QnF=Pzi5M6hQ11(=1$a11k?xPIYv@lH=RPB8a_e3L z*R=a}cDS0-Pb4o>ARCh&`+%SgKM!3`d!T8zSCKq7Gh0U_vAXRjF&;&P#H@(X5!6A6%a6lR7J$g_D506(mMel@u z9%-5my8a=%fi5C5I0A4O#jzbagPed5p`Z_}z7+Un{2|~CA4Z+S+(7{IN{oExk~*G* z6+13eT;pI?sK0Nd^&Vr4J64iZPNtT)vQP+fzB=k714Bg2h-WNQs(lPkw`B#-Sq3yz~rv2lc*Q9HmbgZh(sy6_m zt#3<61esY!=-Z_dQ!5 z`0wXk6z-dpPdgISl8ZYFy%B!d7`dAJn!u~ z9)EFukn|s`JNN| zLreD06T=ZX5nCxk?US11sqtLT4{lS*ygV9RT0xBM8^4gHJ&w9x5$MZz9i+C4GLyfk z3Qtd^bER{({S9a|_yyEAP+Q$?4fh4RVYBFQiqa{AruviX-dy^Hu(h+ehDKn!j738I zdsC{c?nN}?qc2>;JT?xO3=S0ZtWzRSQ^IZ7e`?+&T$rU`K>q+g=M~tKNgOh1wvM*S z;w?ha;?CQQan3S(5knF_(5}PI3IOri_@lu!G|dk8Qnxc(2+9U4^ENsE04BQVV5--T zG&VM;LUk458kU87r(1dVD;SS(UzM}X6|hxkN1l5HN)x89BQCiNPhpS!TKxrmqS*IV z!qXY~^`=PeYa{uK4(3$CV8{b-20$1c$;YL0Noowtir`{MQW5+K6DD_%I_(3w>(5HI zx`E&PE7auE{6{aG@BWn;%7eT{6yy?nbvYH3^jdT_qV?tOdaUzWK9hZMYOzmp>{|@v z20otMD;+G~Q@J@QCD8JZ7iv-HFh;T4T0yMOxX3NWb^;m)2vRHPpkAa+w@$b*`^sS+2%Etw1IZIQ81apv2>0M?Zh|KD!q_cDYa%cneqg%C- z^2^GH8@B_=#dG4R%B(qJbK+^rq&Z?>e_-DFNB;nQSDp15rw7#PhxQHcq<{C-A5p3w zQ>q`>H@=bo0N+%7MyP#GsDEJI`bYl&eNpuqq4heU{eyeyAN}=5)M|&+>WB6X@1%eC z)gMu+A5*GtXm*m>*_h@7adO-o@qu237L=(&mPdXXoTM>Fwz{zWhQcu(YOO1}y8 zSr7Zy$(|=%$J(Dy!~Ui}_eFOfn9Fu^+W!EIw7m-d0PJ_)X!EuQ`4b}t@%E^dMHgmz zI9#s2Djw3EtR{owO)Ff~1)Z1LJmRIkbily;XpKcDWEiZfz80UfscRiAS>~TE*9rQ0 z?LP;9z*RU~IB4gkmH`r@kS;7nU1By;3E zrE!ot40=*-!@2cVlAk4XEr>OC;Y|-=t<0|rXi;gA-&?AWvQH?H5O(=gAIyS(8u8-} zjQU!WT*^^3F0HL>q-%!6d}DDq1KgUaMJ-CFDNEfs$MRcUmt?WKj31G+*Vpx~ds=4m zmEu#@EUo8Tq-XUsQ;+Xej!Nx&DYp6;*W&`cNuM9qAUGgHa;#L6JD~k%{{YeQR#M#XF~7%`_0ZX~{{WK1ZT|pZ zJCFS+hN4>@hC#f~L8v~IC<3OdWSWkjHKdbVz>V!6amBd&r_JawW7N$ zcM8s90~>%NZckC%pQq>NW>qB$X-8+d)q{*>Q(e)7LrZGQ18q3MvF~0ablmkB^Nr`k z{{S5LFI4*{h%I2aUBt4yMl!=AI3te72M4cu_Th)a*N?i68t$$guX!}jqWlPNyjS5H zEo4D%jd2o6VM%gE4*vk9a;y}aa-#NqN_drIsx8j*!pLK{nI6sUGT{|qlHaHryf>vSJqle=!)iJsd$p!2ubp6iILcUd;H*jElJJPuAv>HtMwX>B_}7l zE^FE>8oU5M$vTgcP%=lc^&Zu=S~04u%%L|2p~_t9+MbCtHd>XWcg_fC9hjZG<96(J z_rdoy$tNf@t1fG7&WJ%&{u{S)wy&>?*9&Q!|k zcKKpc(kNoGoeiaDP&%gWn&nikg<8gI(wc;LX=8CVg|Ez>w6haf#m!JiDg2k^3SshgBb z(h8;St8#&m9-%l@A5b%cjM8nfo~Kd)Kp&oW+KWvZtcvB)O6B>_KmNMrg&tOCcFOH} z5w}oLgMdKBFe$onzWM>^-vV`L^vz>an&DIywondw4cQ|-v&ZR9O~+%S4`(KN-It1? z*6%i1K`}A7&fqqc_03}`U7nXJwawV|3oVYys2`!g=RTC2qhmIX6UDl;DXr=D=jT^; zcTjoYWKvPO73_JJjQmD*OL!o*vs+C*CJ!7#t3ENgy-q)!T2^*Badq6ZTO71ki4=fE z8Ac}s@t$e&H>)^p)cZeNRecilJ7G*sxRbyb=k%{Y*!W9b@`j@S0A@KsjP%CrbB}D$ z0_hrjnw*6pz$2;j6am?IFTqW7sBXVOO|hC6w^KfS>6=5bH-u)+df@S!0p+4ecLrr#*c;el!8qX!k>EfJO&u0QHS~O|{l+ zjkU@WGn94ehtyQu(#ITO@ehQdcY;{%wAAE>JSh4eN8n8Y*plPM+O@U3bI+vtaLe}{ z_XTeJ98eb=mwqVm4WFBA_O^D;r)x&oE$yC2Kb0^g@TP;M-{=y3q6cf2a+9=&=SLog zx3BY{5-j*q_Uc2aXzg>pYcf_Fk~jRhz|XEf&q@Z17JBd5T6=4zzQ3L+3bc_~?E~A7 z=RjQ0x7H2Ag^NzqIXst$ARqV96an#EX1!E=+b>$USx}yUgH-l2O3vrh9|5)I)cikp z1oE_(Hu4PaIr&Jy$F~*Y;wgJMyLCQ~3tQULSKSx9L#E!}CZRRO%yGxKh|yHB!1d%; z1BLG7&sLn0vPYZ2rd?Xytk%=3F5n9M!;JgXa@$z4+&YbzV7K?I@ zsp6eVcPf(@Q?QSN`O~kBsPs<91w1Sk>gPjY;~RPHmd*6n^1QqdB=ZR)lE;D1QftVs zLC^P>)b()ql}U12K!!w?;c<0q8q9GUG|CtG@%-zX*}aXus(PNWc^X5ZuB_6=##p?s zF`NaIftA|X!8{fG1$SU7I(08?5r$<2Ru^4Q9FtgCd_g7Mren8gz+s=f+q05AYub%# z)@^NL#&oSt&v5ZX>8R*)G3B7!B6^RT2k__gsmI!-7W)qkc+TC<3ch&s4&UMZ(yiht zIO7%QVCC-|xQOU!__ZT#Og2JD4nu9`w#205XGOIW3dc==ULzsg+_4>i#dE@%=Frwt zb_HoXPy6bxnI3o4 zYMNtNwEz#^f8RActn66oUS%u0c{NGC(P{^mjlVI$$o~NK(@xqmo~=1zW$h{K7MAj9 zlM9QWJiKlBPEJh?-$WFtOARk+Q)2h_)vx_D{{X&ea7qzQee`#AyaXf|I+jq{ZfG|_9G_Fb1>AwbiH)(fp?-choF8iUeyCO*72a>7| zamhaPSZ9j<)SqF|wJj&Z`YaJ!S;GTQG!PAoy^a)+JMm2dFn?#=DmlDsqu$>ym1zUJ zM$f>OO{ai;zE8-~V9&DeA{z$7ka`+SN9X0G!%H%wvVaB%&N%wiaveO{>ThZHXt9Y7 zRWL&A?nNe=Lrpec@bJBlQi^CC{LU8)am#W2Yl^jKHlnvSr*zF}bnCl|q)T@VZ@4jy zT}Ix0`-;|^PjjJY^*b@X+fCGEx4CPHVYY5vgKa9L;9|3z)Y45^w0V5@Mc`p^046oy zw_MjHDoIZ9p63dhv$(c8gm7Cz$+aitbLtIVE}W$k9v&_%$E|Ca(Nj% z*JTMQK}I?p@~XLy&;TpfIL84%9&zzsjoj7AGD8KF0IS% zKU2l7HSKEqR%2xg$r_v_jkj;VUNg;dC3JeuwA;|Rf8q}j+RtkDwyhhfz?KjSfyQ@W z^!7i6J3CzsVkdOj>|YBdZC_Ek)ZI5MQHyaet92lL4fL0d zPib>&_Q3>d@kq!(@>Vm0fO$O)b2)P8k_+!gosMte!p6?U`3nv(_vbhDV*J%ER+O!}YH@QE%aC{L$(v@#>%4 zL2>aTK~ak})NkJz+iztiKkugszpX#3%d1P~9^O4J{zhfb#2r#>jXT4_AbLIh+NmG# z7{mVnF;CgkTg&cW=V5zUy`%TD%VqGj=AUer8eHoo-rd(QF~oB}RxAC}{!MiKVl#G{ z)1l4mB?Wlz)U7Of;xKcJGXDVRLXgO!WcxvaPbjcr-lsiAIP5V<3#a8=o`aK2W@4hYqi-S%E?EG_ zU_Z&J15km3KoPRykQ&wb!R#G%eJSG;*R*650p#`cM<`-|JWhdy0D5+baKlWq1u{Io zyS}yH&*D4du}4SOwEYj_1ov8#l!RINYw{NPiS!w+nkz#Y?sZXk=F0a_x3;u`d6H5$ zP35wpWPrKK_dE*L_t;5aa~kSIhU!6c0eD@B9A|H}c@vAfwv6{FPRSVFD7bq)8RxKo zBD9KxV+{Gv_th^kMxm!szYTAOp{#1RmjR=c#(|iTgYzDh(^({vN0~{x zi>%q&L3eQTjrL`T%uj}Fj`furx!UJVTRK;Hl5^Z!=c?rZE={up6m$JhRy&a{{UL`@O8bF2ROZ3v7JP!%_g=y z&*DC<{{Ry^`zssi)(E5We$9-AZWHdGQS~*fV(Kbtq!Y8f`uE)Ll%WoOSv94tx;XoY zFLeufC9!}>ZpuMqP^A38x49V{dJ6UwTiEj)l4ZSKDC6*!l=l#9zIo4>PY26TR19Yy z!}YFM#m1{kvDGEbK~K)cE}LUE&>J~Ct+*|^okCcU#3KPo_&~j@mRVhk0k3+iwUNq#> zcDd@e-XpiPv@tXY6#ThhGHc9?UdZ+$<7>#LVdD#b4LZ#&vX{7B%E|@+J-u`OHN0ub zYKe8}?AeBVO{ZUKX7Wp9@@0R!B7yUI)Vfkbg?LM;&>QN z=2({=S03fbiGZo(i8UJZHvU71TT>ZFg_2 zT1^eqjsgc>F^0(m5*Tth6r#CwWll;P9rV|nYo=XlN;;#n zlUQ(orNyZut}~z1*HMj#{{XhwFx`BldMXd+LqKV1`rV^G9#T)fMN3SjW7*PNsI1J- zDEOt|AGBJ@toUltA6kl6nUHX1R?bHqNbEf_C<3>@YuWGoC8))53dFEnn1cl%Fxn1I zd-MFL0xfbUvewYRhDlkt2apDO{U`yS7_PMY{{RfynC{|fA(ZssgWH48IG_gnBD7n7 z3r%+FJjTN`Fi#(+9~1wfq-vHny6`Q%M8l0gH`#31R^(@Nk>)?zju zYkZwg6@0c8&!apS6`zSb2Vl188yI3+c@z7tpbyuB^fkdaxXIl0sI@pN7`nHE?6hbn z)Nk52ZDC!`-_z?tyLLe+sIF(R;RpRYP`SA)gpx*J4`5FMyCAH2Qg?S9b7vTfaN~^C zG>I}>f=8uhGxRgzb?v>s!woFYGNQ*E%-R0{uCHF6XBP2O`F=?AGM8*5K7X4xZtc&C zJP~PcX_ZOc zxc>l7E23NIc`eyAjk}@#fLkMgc*k@8O*pHwmQu208VCA`KD4S5j&I`s0Q`s=uhKvL z8kN9gw*F>@VUGJIYZwc})PEY>; zs=Me=m3eYQbC#`G(vLKbcm5VWhv|3!0Dgz~*Jt)seT|-@vFKrOFr^Mz4)NcM^v!QW`z4p3=J~4s06Jh` zXW!nI2Lo1xUU}Nq9xD|Ju;q#8b?hE-?2-IN(AG5sUE}~i)erHnoOxY)^gWf1rRH>c z2D59fSsSY#Gs+HQ`PT;^1O01?y$Mj4B=X20-=*hm})ea_!5c_h#WM=S{>WjHE%>52fL`eF>=XOHht2j;B+ zeL3*r_Z}C~X3kga$s2wHY5rB_)n4;GID6F5*LZ@+>fRr}vw}^na|0qcJYW-~`3++j~lXBqnDy71H-{pYcjNn1mU(5+6Tt=ig07!7xDsf^>7 zZccw1>Zwi;gO_3)qeWwCgh2#r5(08?1_o>9B_`e3?!{SI9yPD%AKA+~ zTipGc#L1s26Ze@v!U^La%D05>OqP~8FBV0n#T}T2<{@((yFy|ulh<%0_UAo)Yp#T6 zE9s%diRD(a)aX1lpjq77T3z4EJadRs$`Rm$fI5z(anx~K7@TW`PDoql`ab?fwD5D4 zFKW}V=HC+Lg}gu(bd{H8a*d2~Yt@F@91=bA_IR|o@ptU!s%RQst2ULWCDhjGcLNad z5>i3XgM+xK$6{+k6X$P;9vSh!fc0|+h}!-=#E93MKpak)ciu_gM z18V*!x|dTns>uYVHTgloIAjAo2VBqxC_^K13b6bLpbxM<0{nlw@i&N~@Yjoy6LoUT zwpY<8P3$s4NTZC9I3pb3W1P?jL;GTC32E?)?94{{+xTKp-;K^s{yF;42e-{4Lles@ z1&tK5G3*CZKpruvd~xvm-)naFG1^PvrLkjas64H*{%xZ+`!;d>LnqR*Rq4v3q@TRH z5~mj~UZ;}yK3MhX<<~4>T`x(yQTBZrADSCor)zCIed48$1C}-Md_i6w-NGRJ8qu3uPd6G?}o;<@Y~xU`+JhMvMK`bxyB0f*QI&cej=o5C_!HK zy6@!7xQi-|Us^RNy(%~E+R0klekQ+#yc6*sNYrdwQq^^xTS&J!lT4j}ie$zDpP2E` z^zC0(@i>Co6*%?xthENB$G zygSk<^v6I$B_Sk?_|@HfzC zyi4M1n+ZZ|5;T!6OBhoJ{{S7YN>YkvG--1$GoMXgRi9FhYu!TPbq$6`1SSt$U;&zS z6lDgiOd#Vc-0q`N_92*(7yR>HRF#gnyPr__ul_+__RxP?`ph@Re12*C51Gc-pnU1+ zDfbuYUOPU?Y;)T7lXZK2=D-l9z&UJJT^iAZY|kSdf~#7uG&ZoB9+7otekGhBO{8$y zqP1wwHbH{HRijs)dmSBe9>M0d>>n6*9uofmkXwJ(Q~ZT__^*um9IN;**Zhx{=8Uvb zBC*K@dXh$KGMxAvZ&6jCfvD`b(+IThf|s*l~-9+fv0 zcFxN|)h+Hd3!g4TyS3ah<#wIKb_b}g$X1MMJL;LuSC&aVnc;u5Mzr$yy29Sihk^#$ z6m;Hk{Dpd%bX4Oxy|4Ly!=832IZ7~&theBJR>MxVd6&zPW7x;8<4zSK>N=2bxt>vJC!uq=y!Kf*;##};jxjGT;o3GwS^^aX`h_n za_5Nmr=mD75qRBM3{j$l2b^~v-{-XwtfH+HeFY3P95=v^Ik?nwdo;0<5!*N&G7do> zm2-3IY0aqEb=S0x^G}UKLg&nlNX9`Q`zg(IMcp4Ync?kK&M3mO`$W>ZNXrBO<=yxS zJ-tu2y+pJ)DZ*2BC7%23H&CUhDQO7u;$Haf$K0N44qI-01{NHaQ8ul06@yp{#Qf(IPE{ex6P^D6gnIt~`?3E3-*x7HXVy4Ar&P$UBa|or zpaOt3$A_vzE%l#W(@Wmf+`%3iR-FWlEncyPf!Ia;FYi z9Pf;RUubssueoGDyOV2UV-NCbrn#ecx!AONA20a6*H*UsWuUov1fB87!vn$V{!Mbl zMi1UPJ~g4r+v$-MAH8oihUG2mTDh~S;o_F&t);|gYTQNh^f(m`9g2-sv}T3uOE#Ob z*dTr5cRi}oNK>fZ%#Tg95ZuPEN*9j=)D>|+REYOw7HL)(vx4*V&!8iz{3}ULDANstoqbbDcV|Uirm5S!>P6bHILQT*JOY1(O;jTJuEDgUVDJvRpcM%gdiCK(JkmO_ z*jkvW`#Nh=0^3};(zQ6X8)ZdUvUW%_xDn6O>)N~=Mk&{J*&kVi%VC9vy34=$7~VSg z(Pyiywu0Jwlo7OQjKNcpgOUbKdKh@BFuPZ5@i9r)t7Pnvi2IwWfygn@?49-gFB_wSp;~4Y%5N8%tSV4ID)0EIGkqcpbl%G%+xvR`UDJ zYv5|)X#VYbB5TKKW64pp@EFOEeQVrOy1G7MQIuVpBDHpnNkBaS$e~F^Fy)5u{9OjcW&Cf)wKM--~#HJYB?(m>ZMBT3Ig+vdiCIbRC7Ue8^u+U zvwHXI>FKLH2llas((g*qH5*iT{E3>}DF6&QmOOvJ2kT1e{^{A5)s*T>nccJIx@W8u z0rrGsatS|`F&3e~Dsp{#Pz9ywoX{3LXHmPC{uUkkcxroAhC&Nq214OLex3Jc@vbVC zb7=0O+Ja}Rcxz16H3JpSw{;Ui5YEV#XktB2r7HxPcSY5#^{X>=VJUdSvNlI5!153C z{A<3=Zg6gB9!bHX;|?*5pUQwfSGU)79V<{)wYrrc+lE-=BR=^Z2>z82igEKalho;l ziu_2s18TPu0gNoq=C9=06^fLfQ%4x?bb4Qj+T!63yxI$_L=Eq1jC&J-66Bsoe{Wi} z!s5KUv$DjHM``C^!o;s6mpoFuf-q8c9+I?|k~{#iV;KBLdhLYy^|75uayu5| zW>(9NN1@5|{{R}$f;s0T5xA7=lS#3pOqNpV(%Xxy?wJJPeVCpNVCyLKH-#5Ir=tG= z!ZQWKiTwFcNTI@p^#Ip8_q7QwM`J@t@YR=_GRTc0g9tqQZ3Dwny`=l1ld>eboTL*k2H4ETC=ym?{O7zvg*vPdO&GCDYm0v+yoSPt0|9^>j@)$Malowc7#?P)NZSjHgl`(%iDl8XFB15A z(m2~oj?YZ};-HzMl1!B?Cf%iTfJagOK68Sk+LnyK#mr(i4jMKm7$c1E+*d^c3~Q`rlB3Q9yIB+_O#R?^6sUQGVcn;L5W9k zk77Cc(v3*Y=<_icO7LFORFU+4rY^OeQd@MmHsvNrQNQP!5;DWzY0VXzon;5H(LqL* z9n?!xhVdkl-A^@+mtk=B%@MkZ{K2`SA1g^KA94@2Kpa+g=5Li~j*3*<7yoPc)-XSjy3I(*q-gWn(L z(z&r1I@n5l?iNQ@8x>0(SJ}DUn7X#Dd#QMtB97iPhD&cT_puBJH~<1U?_NDhp3(Cj zVJkg_p)Irslw;^ITBtUzd6k{2G%LUFcyo$Qo3-phcW2FC0DKXr`18ce zWvQ!wXWH96)X^h=Pt2+i^0eRXZ8S!k9~*lBi=H3@8d$G3>g0G@iD!>wz|rMQ{qx84)G)FU?*YZDf4-r9q- z$CLa7o=36$YtO{cP@lMU(y4W3T-ClE+e_hyY}!(8P4OtrY4HHjjYNQ#y@M+ zILEb1iegQlq?F8pfIN!6i2CEG@YcC$r)ljC$Ch;&9WeK4_j^GYL|) zPH6TQ#G37%qo;Wm{$~B*zGcA2G_crd)1NejgTd6JQ<_^GwRfJW>yiHet6!k6o_n7p z_ZE*&Pm-Z)atuTkCg{d0%I>+}76iv4@i^RDAg0F~9?p z!Q-i=QMxUrLzAiQ#Mqkq9>nL3MplEnZW9NyEp9p95&4fd zowImnF!B~1ieWsMy<2TNx}fnY z#@0HdMqbwH)f~x~CETQ|g5@Ek52pk1s*y%8;TI^|eN`nHa0bH(4u%Yh*a*NuA9P3B>lecKgfFahVS zr+C?cNXb%f4S*0pX!jo6H!;l4o2-85EYw2~G~>((gP^qKjShewOriCQ)X@VAtriQZ ziC6hiV}5b4h18etVNT81Jr%;OXjpoQVck!=g4Six+q>U-H1?|LT2tJ@?j-Y7h4Upd zLJM-uzK`QfNt(nGvboy#l6mPPXI42$n=yiD%qw6EVnA#DGQ5iYzDT=m+roW$<2!$ecD9DqLb8ttoqIUM%xPELFUr0 zylmETf|2T8mrKdmVO&gk+IPCF3yKwWoiAZ~sXyZ-It2Dje)dW)f)M$9b{?@bQ@4fq{>}MMyU~GUlbiL`$GY1mf^ii(ZdSpDBzX3xc0M7(vB8yT4Ne2Q(U*ao$AypIcv>$G zMb4?U)Mil~o-)Ylv>UwLw2LdY#{kRezK-0U2k8}j7Wh$5dEZAf*c=YaDDaK_Jvu{g z`-g$s;wh(AFqc*fs_`qodW~nH@Y_<}+b@5yD9kbUM0~yJN6}qO0a`4@kF`14Iz2Qi zgfkMb`q;icI-oDpX$x?$+^Lc*I$KIsz%ts4V1LcBgDc8v??Qz1+TeVlTApBgzlRRv z(s@MM+n=}?5ByVH-@Mj!$yML^k+~+2 zT%x=$FiTu}m~v8qQK389>$R&6Y8`h{=X?5Vts_Y9($z*5vu=_3hE%$rS|LuggAA`o zQWkzu{2?i}Fv=AVugJ}8J~Ys0$qnlAuxu#QS`j*evU^j#@D$27znqE8dd~xa0>bcg zF@89gBZen1rdQ_G3(3Y|`Px3ay&{)j7M#)0Dw{o7FDi$JnScw|d+B`3dGS(P$mLd; z9-p=6kd+Re3%>gRZ-HE>h01Tw+CA$>@ribIRg_lP_xj?7mKBcjV`|9T3QJkg`FyCm z|L|ZJc7pQt*Wafw%YPVELVJ00^mW<0W)HE4nj@zUN;V4%gXxy?uXk&-dNMu!T9#?& z{9TvKsH-{St|J+U0B>3nGsf)n5T$$T7VTRetL9Io$Ow)jr*cY5m^%g?!Zkki4$ow|k6K)9tANmT`l?vYWW znL+E;w@9+{jzQxC zC?)gFFwFuvxXp|f;k^#67mfA;1BZ@O`GH<;zQ`c_3>q&|=)teupXJ4a-4Q>N3Vd@w zX7A9rQ=y+4z?z@FFzf1|45fc>9H8`sHo@%0Uk8u#QqX2(wr^B?Z|lMU>~0pOSY4_yEtT0DclnF2ll7_d)A({m7-5 znIZeS;HVDixHPVk<@v@r);)a|IrkMrxf=~GO^wytJUi&a{=5FYX!uQki>;Hce*HzH zQns7<-NM<-$>g~%P%Y|~9_>=>D{7J~Ye>uAz~0k`#vtXIfO2-012ankXfFrz`YT@& z3#n$t0@<2Hn`p^PUB#4jk|To})o6v(r)JL?(!-=+lC$C*yc>MI6WNZYvg291Qr6n0 zQ9j2$??(EyiggvkK&%j5?g>b#wl}uex`(z$@zYy@LZ0RzabxbWN+v0FBrfh*)R!Io zFax^%y$(II2_cw~^u+pD*3>_Y>ITuL{x_H_3M*%SuIqA4Vu7o+L`8 zHEc-=G~Og9kEm7Lkg3JNeOxWE;P! z$vJMDpMmtO8gKNHIPuiT0)E7x7npE&9WKjDA)E z^@U@(L08GDajocpQ#TgUnmN{DXg&qyjC@7eZ+VO4g(XrGv!<|djRY=&?{~?6nLe#u zp&>Q}D(tVg7+NgtD?N6PPA3%=n-`jE4$k=8F8Z~*75`ya=s(156(3*?G{qBNu|LCt zzkrK>`59`nLj6j@PWnxz7@Lp!Y%O7W#?gFFY|o$Enq;=BYnx9Y;!Qkoujb}U>jbM> z3-CORQscKkA#n+xZ!mu>NJ$c4#JW*Be|pDRHg}G;DqdaP$`1+27wjjeN!4!Q{I!qe zDa=u{I~`NN;_SnMmp4C88M59i>?JRC%JMZ)uGz*HDhWLZrknG}u@2|I$Hj=^9QP+^R0+QEO?;sYFKL@rtC##B-SE zNyka1iD-7)XYO$>taQ?FFh!~M@Soo^^`LV;Og#uqv&*6C4FMi^A}q$I8v+Sz?(K7x zjzs|$&`x5sY-3m4hsVArZ%RBG(JfqB+==BU%bYkuB#p)eonu4}TT8Lp^q~qt6bSDM zKW(jVFZc*Da=h%=^*Yql1f35LWo5ufB4cMVEv1F(=7Hh&iA+DsH?HMy5UB8xpY+3| z!Q$dThhzXC_y@bB+A}8#hF5dPRae~nRq6!aH6`d5V%~^SUK1v=DHqBr4>Z8{C0rUl zvsZXFoy^tkNT>lPoq}xs#?sVu){`d)^HN~TY@8g(wHpcBzO{VQ^(d1=-%lO9nM^sy zClX*@w(pg#pG=vj@Z7toh;{<0%Ce=C|KquyxQGsS&3G5^Upp6M$)fb6pnMk;aT$os;% zWR>;x+vGoUOH}q2F6FygCfWPgpBKBL>BfEnZ)Q*zA9niN55pZ;cekq*(CjOCtE{jm zJto>@=2t0;2DJRcxavjc>o&CHDy%(@W+N?k;C}qE_3#Dfwr+2O-)W~1vX~_v3kt46 z@hZ0r)?6RF6l>I?&0HPZ0EdHxa?Y->hQC&MHl+or$Z?!S>-oy#HQKZ}jW*5aL4C}X z&d~hVClq@zhqxH0xplOa`qV?-zsTH)t!-OI1W}u8=X-iN+TeM~;d4R3-P&?rKNmBz z+~oyJ#WFE$8*wiQj7W4!6XVs5m1j7pZ+^;p>)nF&TZYXilO8G!3ek;PVQR^$8RuL^ zF%`Bh%o4pqmi0<>iOqAd1(r${M-b@mt@62v776q(dVF3mLpv~^6#b-*U@QPK(Dg0O ztTHf-i-6*Xl_#yqI@5uRcHNnoQzd=ROA7$^L=PW^G0a2VOVvF2+D*^2)Gvz|nn3HY zKqHu@-2VX8P`Qd7DG=U=3u#unW{zdiJ@en7fJ82%vf$;zo_r^Ak&q2(?WDjuH9cd8 zCiHLzKwO^3&JB;`x)viciDiLZ+|=pt<=d$RCK@ZiQ~vPBY9Vg+tF;17PbVYm_ni-x z%LK3RY0H06esvC8d=(iTn&!?GQjedSRj;nx`ADLtIhe6)r?0;-tEa_TyjmZ7-~4xj z@%>6T^nxf`LpKLzE*-a%>g19xSqkA%YcT%1^M{&#>!$wyIDB8(9zU9?>EG)|BAqrV=XNAFWa&Ttz6|{pUjLtDSxqC0RN&z54ZtM? zL=TcxKOkJis6Pn$th7EhyHn}rBHdc&ENzhVZ+U*^wyYiKp@J~-?T^e&E5M@@!Bh%+h4(4Fg%z_wq~N55&O>)w z?<&(*TFAER70k@!#5w(srknzR)#s;&q7kV8CkIn1U#f!764kvdlW_YmQZx7%mAE3@ z=5xYTya{6C+*{N8wMBFxEnmA6ua;DEbHZg%J^>`n!X9pzR41VR8NRG7TUWw2kou*- zPF~r3INK0}tyTlmmc9xB_*0MzffXG1(DR2?)6#`*BwD5ct``(HGQnKA#J=T%h1%w@ z@6V7u6c+Q~cJz7aIBRlZ-9+49Zbi5x`)jgnzBT-sjDA@@q4OPmk6_T%r;=#D(9!3a zj#&f3*2hOdMO7)}cRs3To~@r39(NoZ?7*a@2u^p9{cNd$w1>{6`2g3>Qi^SG3#EA~ z-IVZ3{zKsbrAGLb5*7(*FUeIYK6bLv$cm81wq;5gq`EHua zn(Nn_TB!O_WYH-u##J}}F!Wu9rkh>3GbvU!(H_=!xx)M>a*6gPX74O{)Y429qKNT7 ziRxfpfse5D-OtO5$JwKl0e#ZT!P1)qaplFP$=_I*vw9#Pfy!o?>GcjK3~4 z;aX1T{C>|NUJIDkHvxQT<9=Dbl*$ToXf8IksnUs<-z_Y0QyYuJ?N^Ht>^a1WR%1MW z_@i<;x>covw!p`k>h7>v$SChZtolZ&mNj7A16j@AjpY6Z3|esdybf?^<#|B#2I4>Cboh=&{FgQYnAzbPwytg z{%ye%(sDg&otDd7N(UvwlD3% zTW{1>8ZY#=AzxDg_Tq;HouZ$BC+tEwH& zB#@vrpK7bb$JZ0ATq(50M^FE}%6?Ri^u@kb zj}I*-o8rryz4+{CB989D2-%?E-cTJEMwk=!BbhvVF)_KyoHE68xoTdSFsSAZz6(T; z8&KnMlM4M5u75x#Y!?5Jrrjs9_F`J39{b@w^G-ZG0o??0D&X^cC!S0$YWnKe_W-4T z7z};w=#d*lkDMiX@Z_$YYtN)=?ljzER#X3T?h8) ze$vOx^^NGsOzv{r!Q8}4TV6DzWNm3hA6PWXrT$T+B`gBW8!In+BV+cv7t5Uz_o~}* zZT+~vhi$Zzz)D&UGPzVYZfz30$!tKE;@q?$Y_UPgHks@WpHt6EIW#_=gx4~1fDS&& z?-%B+dpzyoerfNTCio-tt$uRyyZ(FVh*Pd+eJ)e$H?lg%{OV`%1%g`Ki@~!%ATQ`* zPkBRQ_lIirlv(X3iKm61*MbDSn7Ss<0Shd;yOoyF+F5ymvz^ukNAu+cNq?sN3QbpU zZUP$7 zNmPH6xE^(ly!jJA{pyw6E15v-Emagc{mp&3a?gR<-&Mx98kGceM|*fpo`b#3tCvA_KV3KXVs!JmiNPj=39 z{QC@Vpv#FAv7?jgNp2>ZxywYOh(n7uVZZe${uJV(o#Iu2V=Q|A!FatSlrK9Up_l1r z6ZX`tWMi02mV+E<$WQjn^VjPbcuH^l^CXdlL@MU;gFz!_iJs?ADA*@G)LF9TMv+D4 z=IF>%1mR2O%CEzW`AWZpl~Wf(F>h4z`d7Y*(Pw+4W*)mPl*PSBF6`1%6}L($9i$q< zZ!ctwbV2fOtH=ok^agu=QQBd#zORZMS>cxX;l=o_ek@BS#kOlg$FCM5q3~To@~uqi zF8_4-e3yLP1KFiVgx>O#@<(+OozT>j-uk1qB9!c8<-Q4HaFYF@$_yw)S=JX+QzK$r zS5G{FE%4I!#RlMatl*h$q8IJULQDJgy#cLan2Rj`RCbfv7)S5xu09)=Hi;)$Po8`A zY_tPV(>1Z+fpK+lok(keT`y&O3b&yt!uz6XNr`anN=|bZQQ+Ipx(oKnzxp?J;E7D# zv-5tFjGqw16X!>7#O$3fXPiGT$Vpd~=d9iz*S+k)063y%K%pkYXmijR$aUeE`P%S( zWs?Vm;{GZmUKK`5t;0aay8IiH7eUnIwWA5B-u2)WM%8OeJY^7nO=XBD<}!PH(-QzYwXS zze&2&NUbE955`x(D8)H+2$6V-)-+G`uSG$nhoWePC1m+=G!yCMp^-A<>sXjV1@?fn z`6_dY49t;yKwsru2gZt(;X&igMgQ0PLtp4l3vH2RKuOn`m=a*E6h~)Nqa<@?Q zJmQ(vqQOZ35FNJ`YewI=#Az<89Vcd-g)-8G= zlAb5m)hthY?XlKxG})a~ORv53xq>9&$3T4t?}ZXZ`(t&#R&2IYrGSN@cJ9CxSbBY! zp(IDUP{q1Kgw=fVbr*hvxEIID)lBu*DGf_GR#eK~^w@A_dBDnWOx+ocP@CYRPI!lZ z=HwEH))9J!6RMaSPtN}%?{(Z4_vaKakyt=OTyAz^nj6c~a7xEO7~_YV1y?yCiK8Pe zaej0LpQ3hhKywzN(DK6$H%G#kPC0Ll#amxH5yqp88{ko8Ul&O6F6h#TdF2ePl=1Tc zXAy~4Z9TD| z4FD=w(vi=ynboZ%%$_LhI2E~MlhID8?O24urZwJ&c4Qe|sB_zZ!ib%NQb@#!Di$O* z)w~A^=EYm4qwnbSfb<)#z~j=!1`jH7h>crdP*u>!$qNtdgxF$}NE0z&=o>lg^{G?W z?FNt*cx5X}qu`ChjI>B(=PsNmf;v?){6}N|E$*hjTdKd#Ym(hTxKLPg8EydmAVqIl zLfW3@fQ?qAyUK>7rn!gH_T%WWjGb1MtVk^KJFc(vQ-M@|v$GQ39iRnQ?vR7}4 z%PMFT@iWy|ixKR5!MDzc2rxpQ&=!7b5`LgK5+Tr&=eNZ^NpLaj`M|rNyq&W&Qn@yr z%bK`0hy|mKk>yC&SuIg7^^w~3^IAyk-*s32-2|psdQ9Vj2uj-F5%plci#_O7)L184 zy$@rs;7T3xr669Pzfx&xiKAk)pc;yeg^Q7{VvxKtx=|-fZR)R|0d z`llP536lUWF_D5Z=@iuY-9h2Z)e|TD;RHM5qN{^lv58#_I3Fl^-a^y7r_N>r;;1JN z$L~ppQVwB(oz6Jf+i>9$So`!ekaylKv>?i7RmeLj(0whAOvQ{-#zL|gI0`y&tOU4tKX0&TuhUFc{Wy6TPE;#GO>(3!DRb3;bE*2^uAG=-Z)0WiDzj%;4 z*8v9&*}h72dp_RSx^!M5<+#(FJ$lRgwTO|=g695`1q>>^G>9GuGhvFzOv$>SN^zJw z(@vjX(3QuzPT@&gXE_+W`ND&Q?3_++i1&7*4g{snd0NP|n3pM9VM+thgSEg?Tyz*T zC&TGfh%UbT$E;K`DQ#}2OEQWocdHs<<6%G%j-eY>m|HA62NYF)IMJybCSn{HIDM}^ zLzO_ubb`B1!KU8WIGM2U_6XPV?iDCQ(OoEK51Te+}^Gcffb7PDEZVxd<_ldz*CpU4&Jr(^(diqCEMtO{< z&S|B&pwKfNfNqM|Rm!A;pyxzdg%R`lgP{wPS(g4HDbCPP2K&rI6To4K$+z{*>h^ZF z%ci>uFO*zYw>Q=;j{4X(h^AGdq&ubguhM2#fF$ASN#DyT&c%)27pLq16}V-n)7d@3 zeoE!EsT+rE|K6+dg1kgNl~hSV+Hrk+f4L*#g%D?Yq`XX)2J&4u`KyE`AhGU-pvA%J=ElovbrgV zz{BjuYom1!TcK2P;s6sJC*=>yk09h!I#GzfwB@0_obPQ%A}Z8BewcJ4H2C7(whL>Q zErZo_Lp$D_Ov6laE9-W`uubi*>})G~#eSO066Xu6?&dl78F19$%YI7p)w|CEzYE_* zrt)G_;L`=`?CyMYn;Hj;czmdfR3cQ7nA}LV>7|8vq#YBD5gEA_Qe_F#qf1mph5<_( z;+mLIn;Rs+va6DL5D|~FpctJR128VWeP*od(5!}9)W~LAg51HtY}z{vzO{k)e3GQO~kN^T_$s+qkf??FN%;wHy~p< zH)h4tU>Zc%d`A;^sV1>kz9G{Z=b#bQTZ7SuSt^xH0YV3^ZF-8B*%w;8p}q4ec?qqi z*$nma>78%dJ+lNCetjAH>cnXgPSG7@v5AHSKSm{Cvq!dBxjXG0s0PU04RA2Rfsp=hjS5$>eOrA z6fbx`z^;W83B{$f-_i3PLO_ai!D8!am^$KjMI_>)YUqSAogXl-z0uoA_?C4g!rn3? zA8TO7=+mHH<+!a4xeS|7a^{OuhOp5e;ccPE;PT6CCq=5iKgz4l+@(NN%o`0yXjoMP zqibzfJiNt^xvC9V7nT^MNs%ayG>UGgZ878=#uJRUfE#84YLfSQAc=)6Lfm&S+cnm3 za##4_M$e2rzgME4^8}x%1BvkdIfk{M8J!Rlzia+zJij-%b7OaqGAeHoehAqew}^mT zy(eQnku)bMpi0>1eU?rkN;DjNwRto-gT<=B0{RwZPPxuh6CnwVD6ZkGqAD$Ic8jYC zEMz(y33Cfafr!b>u-0wgZ8vzgQl{k3E?2z@qO14aW+kj~mCfb7J=2$rM@DA`s$`a* zCEVAm7VQeH+-OY66F^=>2L1T{?Err2BJ@lyp7LY8uvuz(s2zLg=*D8!usptWiD;e} zb980Tu0r0fgGeu7GF#b(u)4GLH(M8W>noPcLP8Txjzg=>KpoH400_~0FGnFfClQWn%B zq06_4C%U`N`<`>awzb&6kM(?8L^fGxjYP=Fr6?8GSQySmdOk9GENYiC`wP3?uX(Y& zCic0$nODRggblp}Mu9zCdqG=G^%60eG+i92UFdSr#U5#~+yLu#l7@7hO$PkgvOG?7 z4^%S+CpBqp?kM-?%jzI-mG#1m;3n0$Zx!&`-wiKqEm5p1>8;yaKx71m1N7jhMX#EP zYWCY$zvJHA_OhS;&zC(6YbDlfm2i%ph|qsZ}}lk5?za>bbt$K2gFzG5qZp(u3N z*+q$~Y6_2QZ{ACs?W zBJjfXYNuMusu|2Cy;O}t{acjC0m=I-8FCzcN*Nols!;fGGL^y?c2Dg*aKSaSv-UGn zdc#x^DM1gZM55-et0&qb-@Z^W>Meyd;;e^J=w_Obm;1^ZNX29_RTeaB3~+yktGwN* zK_LI0QAIuLhvn8-$oYd=Lj29eh|!M*b#<+eBSu6+_BX$Hj3xfA!i1~))c_^qJW35s zvadON`E%l}LCsScEl0`^jC{aR%R>FPpKUHF#)sX$XC48cforZQ578dbV6cd zjt8HPfr+nb-@h;oWqKoJmf8~Qw4)N(Y)#se{XTtv8NUg>JV4Iy-o2|)6v2DY?K%s0 zb`b(_E!AtLtb>+lcXpzDVoCJZzi$^Fb1t%#tXKRVPI4aF*di@;hbpL>jZ7Dlu_NPp zeC}zSMb2j)(TeNdw7%xA{)b%fkjNSkZ4t_8y+WXCb>T&AB30Wrf&ZTmj$I^RU#3uf zM(azk-bXmvqayO)E?kN6IFX5@I*vqJh$i&!P-vMGJpF@e-qEx3@vQ*WE#x1DCwdWY z-wt8k$%QAT8@LgjKiA-~eqDAdA6ge@~xXW+8@2Nf>Vus zSc0wkWl14_W>9l>C-DL11lpqer@S6uyh&u+OZup~m-;%`reZV57;_6izwPe0%lB9P z(<#b)kd*r^ALc{}!!NLM)FDE$u|f7!s0sg5k0ATYWPsz*_^)o=*<+?cP3kGOZ`z4G zIDmeBvq7DRE~B5=-twY5@L_9XcV!#d{=+^`iW9t}&Wh@oa#1%UKDyGe`|4OXg~W98R6v-nYPm{ zfZMC;b`|EXGAzj@uIS0*#Q5d*A4c-zy7DF~d8+QoS(nywk}W7M67W&_Cw}Uo;u?l8 zDZZUMSx+iiwnnbR!DezsJ!$^&`k7+Qu^SaoJkMw zPa5@1+%C7VcRc=D$l1*TlQPawr#{My!GLg1iBO;{5OwqtvdlR1$dFlO-wr|b9AH(( z!FXo^tu9}Qa6rcVaTK$8v`dzAl|s`=J;dFKGX))7b541KXoM&kD<8J^ zm8bZEJZCR9Ks#Udb6}w#PLl#6L-6n^n(In~kb)j~v)=+b=vDjs1z$mLm60#0gk14; zc__I~UJtc$=nBZG+}euVtBTW_hks-9J_BbhLkQ;QJB6Bq6I^^%U#Qu7sso(NO8LaO z%RwbAwT4I|L$Ugv?^$oXPNZz}Hh2fXNuGw2-cwog%tppO<~QmK7F3h!;^gaAXJ>SW zG>s`MZNpzB@89(8H10#WEDnXQ9)}<$HbW<4D-xQkQQvj5E_#iWhk&(H7wAMs`Kl$` z(<`i-=W?=+5S3vf)3j(^s4K9KnGjw&B$MR*#hMafVs*MFSgxE-o5*C z;u8pZt*m}0meFH$I^}KlAK~9sMwMUX#@JCQpQLBV)~|^t&jQ}DxWsJuA+(igb9175 zeP=3nkfI}7Vt^ZLuctWzrTV|vJ4^pjlNV+s=Kg;mIfeg)QRWmEkVr>^x&5+gUol$jyd zc;}U~ZZl0ivowB}a1QqihGpHMc_UtvsKtO_7lV$c>=Vo7n=Z{TFU3uiCahC#?0msQ z{NpmsD|Ox{Us!aify18=<(<3*iszp_?Th9XrEQ-1e+Sz#?W_I~K)_cSW)PgmV^7;kgr-i%^6U$G_*melVBa(C4{@BMYu6~Z5F%YOf=6U#i8h1nKV z-0SMYP^j&%W(0iJwkx@FyB_Q0%Be$h!Am-~ zs8zv2E_tWb74Bp)HO*X@Ck8DouM9S)e%WuK!?rGDA*u_5hJyH;+4etYaXY)jouUJF zGPv!7cVt=c8LJtF>tR)r)bD75RBNMu?`U-=N68Aw-5zeS7@pCNETZu?b6cu~WQxd0 z`8&&*N4U=l7hpv{8)<kdT6~pr^B^tO?5|VvRAiDdUsm&wh<2YsqNFSiB zZ5uBA$EHO|OOqr6m25P#3ps0|6lIlPX>_x3Q6JhEHfMQd>#rD+RJb?uyC2T=CSsPh z0-DwjMyYqJ@-a+gq)fQnwXSv2=ekK{p0j#>IZ3+|5Khb8hqV35au5e%|GiDy(n-V< zyQnHBYM~5iy~ivh54)6~>xA~HD>VIqA2KDbT1cLmd>xEK+ewIa!f~3J#MF2(UYl3j!`P=M*K!LzPzPF}2qdK$c!E5Cny_ugWfKOD!aqV!EwfWI47;MN_ z`kpo^H`G_VS@_JVgVEJZ=gb!Oy5LSyOrqr3*dPO&&0m7wlV%0SOo!|@*33%L)hWeL z)bVxwsD(}ZxA;IsLy6$eLc?Cg!}ao6O{AG!4MZW9)OygjHA6-Qy|(UWmiMv=XU&mj zsujAz-(1WO%0YSk$amgZAMCJU0ZgsS3da`@~U?F9k1 zY9N}dL)bkFgHj-K00drL6Jm5(xb&#Dn)Y#X^B=}-A!my}j(R)|54sF}t>I3WJ@ar& zwIRCj5UoFW#D75@LogaT>K6VDQ|H7cDPzSe?h0|{9QZ%c*Xq$zP^b#?e5*1Eci6>%9NhSEH-p#xrQE@54)t>goNksrbY#Y=*NE zyf4_dqxS2c&pHRAJknlUKH_k{8#rMC6-4_!M`AA5$3oH@ocR&{EkskL);87j7=bb@ zWjOqO;A|r`XD;9R;h0h0`P+t+s$>xJZ$>K3pPfqlqcJ*;xqiI}ojN~&`15D^l zE#5(!_pWf5b$$1HHL;z{o2oP2?+z;dbiO`PJuzfcPJ*DqN!!2=6X}!2upZY<585+h zM;cOoBi_3fi z?YoSf0qX<0s4vf7`E7`NVZVich{g?xr8Fv@ZP2Za;s{6RJ?!N$pB0D?6+&~GbK;q2 z2nboiSrRt*gws&PuyT+X?t1R9N;= zW>?oH7D*}PaOG5c8QflQ9b|4-H#NmxQnp?hWj-zjz+&z5YIHY{#mH zX>Si(LLNR%Bzxb8c3fa0vEu1|HKH^2)^9QHXkf41hW3Cjr&E5O$dW6=dwUwXo*8*9 zhN5d)uKzH?h=~8BxVl+-d`j}df(5cHE%uZ3arbCI(=1W8%2P2LgGjYwo{(bdKl9%g zP*RGdwHRPPGy;?nTf?rb%~@5};NKS$dn2#l3Sy6INV==xqk5!T6|W(kK{H%Wy7nNp=-wLI z{07-ENlJX)ZF9`5DeT3xjI zPPU=UG{nM0xL_8&HO-Xl3tHqNtjBuQptZCk;ca9lTQ#wl#fDE_Zw79CeZeR~2?-&3 z(Q&F>SrED+e3bY-;R_jdKLUPIRZK&KsJFx!kr`QHp0+ZcNCy@TZQh( zsn!-L@1=iOMG zQGbXi5IUKu0c)|PGtb-l!%K>@2lLF6XcGaLrib~|*w{c`%-^Z|aP*=Mk?QP|{nNh4;G1L|4bgvC#-kNkAbcP=?blH;SjP|Lbxxw~R zxXHJr#dIa;ZWVp}*))GjqK4-BiBi4Olc)VaK@&s!l%Ll97>6jKZl(S2C5RVM3^b9O z_EBBY;mYa*orzC-ycjfGgy(&NQb{Tu;v#DVhqJ!?{c#IFu|N{UcN0gBuf`1_FH+iR>bM!V_o$u*z7*rtP;)D8D>{C&;IXs%7?@*6?aK8$t^E z&Adw-Fb=fyW;+v8Lyp%O$hs2Wgbhc-d(x*w8!2S>U3nEXc#Lvp_hy+>*E z6WOI~M#f4xhnSxY<4e~~Uq~=pV{r7jr~Y(@@7VM{Rp%e}X!9L;u2Je2&kj=uP+6uz z$O_c8llA@1yC*^T90o}cPXU;)(VYFZ9duu4HE53iQ)yl*()KzFqh0@4^I5-JJ zP$DD0Gq-+zW;UMqsXIm@%Q&L02kX<|cd~t^!ku_`ZPptZlhvKbkEeBXIo^j}IEC4n zA9M0f3Kr4Egxj|>e)S^zA0MG&dOcF5`iJ+30)$f-2x;ot^U?ail&WnDe=NWU9(;8j z7cWd9UnwY~;?;%FyS7~)=Io**3zTbtPxBSUVF-`P*vE@jWxlnmS8S)u`qk~tqZgWI z2q+NWsm*m1mUlqsZMolYYRivv6&|>|TJN(iProVAqR>p-{4r#Q^MS*l%+7V5-(@G( zvu5B}FK)J8wYwe4CnWuTMor6WEKv53U_Zs{j)fr&F*4(z`_3rcgfrOh@UNat&W!#- z288iqD?{xk5bg?Ts4zu^$caWpdpCnv9`)C$grM9I<2>#%EERs<+k z|HY0@MR(@Tl5`)JyM+A`BiQ`fmsrKvkPRTYJg}9ByK(XmRZ+n&@9z=~&f|~T zdr7@qys)QpkvTNZ3gRI5H2Q&qP);)hYlCr z>w7$*)ZITR+gAF@gec$B7_QL-$vRx_N?sxOE8}e>X-erPPc&7X!D3j>N-YyKwWcvc zr;?#qbOL`?af3!~$s6SO7k8`#DY5>1kM4s(9QN1&q`=**aD_Rl!^r}eR;7jFmKs?3 zIIZ(@Zvhv=dF+Nd@lP~v=d&MC{3=qOU3aYCJ@DJ{@wwwod<1X|)DmM21=+5`sg&>c z+_h>(biOK9fb*tNpB1oC#36<=4aLP}rY3Gt+zgY(XTb}xmDn`lUJchwS?ssI)wxayyQb$Ii(d`XtNp3(5OD#VHXPW;^L|Fgx(H`te@a! zNx0^5%pTTIm``>iQo_Wl0+lZ=gkLL<5@lsbQ*qVqf$IlzZ8eP@jvKeJk*;kBhc>sy zX9ER5^)sU%{^ARxSvLT#?R+V zyz}6skU}!FjBxZ$V>r*EMXXHeuG6y@0F`S3Y#5WE9V@~XfVBIM4QW?st*&J+WVae$ zdT%oPi>N=wCDBf1m*FUOoF8Zm8rPe4uQFM}qSZ0Y&G711O88X}@b`g^Yd#1<8Soru zsdCV!nrek#zrzqKBrfLuC^~tDT-^nnNxEaIJ;6rp8oSXD_S5D~iv(qCk}O$1lex7{ z1>(&diM+j{oqJ~F%qPYQ7>^NPs#lp*0Ka_d!1^4ph^Xpne0tb(l#sm9sy|*BS+7am zlM!k&_dLCz*JJGfCyEPv7W4s-)|~3YzZ1%*8!qg`x5B8UZ6lAb{=WB zk>aw%bkr7@Z><^cwQS3tbzKk_x!ZEP!yE;4VK42QPG!kj{q}}7)~huKFq}a7QXs}0*pjxj#fp7 zLvhZ{0$l$e03t!%zFx#y>RRQjv&9s4_r;V0xroazLDRQfR<5J6vbec*)t^tAv6-68 zEq7&oYGXTI-0g62xbw&8KRV>Zt(oXxq^&5i`do&4D2YESpgHv7xe`4DF{FapIpvNv z^3#JR2`qg8>S>nF55(HumcA^rK+??2iyWXK1#&J9V<#P>SKzMw#R4i;sb5qjU^d&6B&GZZerioyJNBB)%cmwlT>7S(dkS_ z&VL=kRgQZ(s$hMYfq177!q$4Dpb-*Bgbi(JPd>KoPOX2ii+e7V9Jgy=WjroWi z0CUu2H7Bm)O~u_B_dgE&Ej*@1(jrzpk=;k+4l5@{4_1zd;_F9g9)05v73kgp)!$9< z?ty66(V#CpxjP9N0CzlljGSwVF?sk%_)wmIaV{=IqA zlW$Yhf=gn3KUtnz>5a6}I=Cx^0O7hH#xObtMz07HX!qHkqgR>=@`47W2wHUOn%yAVIosi)XQJupzsmyC*t$fMr z4ncx(MS$b{Wu`@IBsXyGUpb1n&j9rp^zT;_s*Oi28H07HCAFYirgui;Y68UmRMZ@v zhiaadC~2C8g=cvbvs&Ij+xG^Oa0QNf{c~Lo6LB4sb!Sd*4x@Q*XBj&rVa9qdQ~Fj7 za;uqEtM1(E7BoyMeb6u~nDZOHr!(R+{{Ryd$7~9?>;{g3s=xNGzX_V=HMP|5IsjwA zoPC65sc>7f#%>K-96JfcYKqY(lZ0h^XQem|vj(n=_YspbtSl2S?P za!n1eI{yFwSlrxd_V=>s^WABSFoxlS7~>fShm)d=a(#iSi?bB9M?>Q+dVO2OI%3N_ z(py^?;fQNY7!OdVaO$a-AH= zrGEwW%ZWbGwU~kebRPWn>-p1HVrEs;&b}+~%p?{PUMqQw-Egh`e+qDgrE%X&6ud`g zWh7GE>P>A1o{GqM|n28q)8H9 zJCpWF2n;roFr?rfne@*i)|_DI`>k0a!u6rd^`|0@?26`cO6;Y1b|Scp%Ih3EShF$O7ajBI zK;DL2{wUI(=E~fOU2ZNG7-VD$tsy*M5*YnJ#Y2_!Ta@9Y+10^sHB5YEZ!M+)k5ZV@+Kiz>x@)bO& zRy>nW(lum~Nh69!j%#;}d0|{L6~Nnr{?M(V4NgZQ6X9)c3vu>+A5wNLmoEY5)9FK} z(6~)4OI{I&Id}>q<*g zhY>vvpZ*d3KGdMQ)?<%w1S9NHe==*f(T?o%oZC5%8R^#1%CXsB`SG%cC>==s2Oq6O z+*ZsKn?2Szw#2QKX2&h-O649o;y(-Cc#~hayS&t5f*rvlfmwo@T(r$>lHlCLxGLnT zvd9S;9>0&Za85j~$I#H5sTAIfi^Mv8mX)F0T}yL4)u8_XmP&H+u;=e~3IRM&mou^| zq`4K?cx&R7)uw|YB&+6aQE3aW%ebCK@8w>UBI(A+`RdY?>p71_^A5h|Bx`rbFsJIB(o zPUo^@YK^JODlL?@%7MoH*~wpTdVH)djE#CPv9yvOn8+7@9l$h8MRTHz`I?L9a8ceH zi0-zP%MbNvz_J23+&c4FC8f_%H0*OaCCAyd2`wf-&nF>w0>E@91GOt#P;SPqnWss2 zcK48#RJUv?VUf6V{uKFJ)f`o8s3#t*^v?y0(qk9Q8Hn5poQkB|+~8UxQtLw(dX(m7 zCf%4m&by8(J&ST}y$8&Geh#(JA;N$xgDuTKv~^tqpN!Nyfit(RlUE_BJ^ zl&%8~xuR5>W(rA_C4yAW=-coasBvhkpL(-(u0u-^5*QUd>R8d^o+;8N(Dec>q%N{< zWGp&+d)6|Ij`~%3w>Zmdhlf%i&n$O2-}5Qj-sI!?QEQtyTT@8NZ*D*>G_&V%b^ELI zG&N)i-(%Fi80jMN>8@|Tc-FyKV}ZXp2lS^&C#lPcsMd?A>VvIxByf@{(*yI`?pJvE zIUd#a(r1p54YkunfDX}~O>$LdO*knVF-r5mW^Khs0ONt}pTO6i)t!%4F6!r1;Y*_o z?G%v6u*!FbBd6oj@ve#-(9x~Up(J;(YBumiB;sXTWciQHoDBPQrB$S^&gxULFKU`L zm*bBOc`nI4v;5J`8)s{FBj2rg^HG{MnvF==?0ot06XCt*gJ4^!?jw@cM#Oph$MXLG z>wPPVP;quV+SFAvyJoM0 z^$UwX5NXm`ow7oXmfm&;?#QjvFDlJffM8Sic+x+RJ+mA5u~_3Qrt z)~sVICW2RbvdwUL)}AF8yxwYn3v9>Bf^s-MmHGZ@gPt0* zb8Fshue|$AzZDEcB%}6hjsE};_RF6VA{{R}~!{VyprOirK zXH9H9I_s9Ax-?;mI3h@)MUEs;s){fa4uA^5ww0vy8l}2iTFLj3 zy?YQxAp45aje3+Os#A7oinO6xE)!Qo+I5Y#n_~@~j41`QE43p*fCWuTlB*{T3LVbenCBtFt2dPCk;fFxO81oj{|qd9{&I-KmNMn z#!4;+p@M|tJD!84Y8JCc<~8wvuirv&L9Z%NYoYGbtgXF*Yvk1LGn$%FIA4+=lV zj$T!EXF2;xS|^-e>S_J2eQk1v38IiYFV|6<_lIorviY6as`z%P@VL=4`N1C*n+}qneh8^@U zY3v|@_Pm4Ua>cRv)1?OGsl{Gu%;m4-G2DbRFRxM0HQ6L_M^R!6AM`42L)%`hZ4$wVGDY z?)Z$IP6)0wD6Sqgw}K|#QZ`@@*C(H0QuH-Zven%4PZ(;0Sl1+E8)1j{NIrz*{(q(` zNGl_PwE5&^#-kNxHYN)|GxSEcGAim$GeLVag~P_=6djZwKrlZF`D)c2Nx3ukY%WuVrG<_XaZM$!uU2(h zcg5clT0|0aX?c(0nj#zj039N^+)?A#;OrZBr+E5mGgSDq;#=rUaJ{vdJz5CP@6Cy& z$rY(sZV$ml-mT^8VE9AD7n&!F?RAMKmRAxFv=?H{A~y^P@5kx|cHyeJQn}lkWcYkW z26%dLwY6TT`yLqMqa>gYo_tH|ECjBYKpD<2ei zazkrzBO8gML-ILwLeY`wm6QGi7>rl2d1qZVyQ6$UKVU6y746NMeVXP}$&KC0c~W;c zB@{6ACZeS^Q`FxNh;(+@?n&_Lz#9Jmg8tj~`K^^@Ws)-q-W2pFpzYs2wZn~!s!1fC zha^>siJiSG(>clGi1ht3<<6t3>Qd?$;?c3S zGw1-I4l=_{I=#Vb$(qIn<#!L89;ZDh0{pk$1MrKP+g!Q4yj9!e+sYgtVi0=zngHmu z4N})$(qYsz^2P~sfWrkyI3WAb1(p?XHc)SD$BChi;59(+9V;Hr1>pxzFnlGHO#_GY9jI2g`sz z$){x1fW0hwr1oB5U)=@CAKn!$MRh4%mUQ0^wwEQl-k8La;l;C@AFdDbqnhhMa@gvY z*jhY|CfH$9m5JCW2Ojjd4Tos@gbjGg^EAF^-PkY}+NMgyEl$GX8160PhGh*Dic!?} z1YnBqIL<=D;tk!E;zqDM(89t5yAoncfsuoZV4Pzhv0;V2rEq`CBr0DgD=-v&MDKxne zSz1W$CEtUeyycYt0N*UN_qjZyEEPUpir+q`&*Bq}NnF#K=4I3%w~o?DB6Te!`+!LC z(0YJ{X{_5zrD>N8Y>`ZpTrNUP%gUmjrE)nVj@hpdAj&01YZHl&qWxd!dh(+>)Y_-y zuhUm;{{TB&z_HUKc%zd943#Q-VB`8%->p^8nVsU?UqjEeeO667#HQVGvTJzPkQ5>nWz>YrdIX!b% zDyo%|cTCC@T}0ii#(0X}*Fe-Jl-oslBF4_PcUa$)8<~*$s)Bxl-ip#uN=fc2P?Y7# zvEd#g@ipg(d~FQZOEN%D;`otzz4rS=ku-{JS*WVeMYUE zdOt5N{)dT&uPC)B7PS8W4A@%u>sIk37cA3i3J^fV6^C&J@OqF+smDRiI-2%jOWEpr zSe#SD*)?zY8X6Xsv1s~miqa1*-KLS1SmyM=AdDT}>$T_G?&m z10VXq%!|PoBw+slkJH+)wKr9}T1N79RTUfF9lL*D*5_ZN-oFr|Qu8P0_b<2h-FV0PHM0d!%VvRF?XBLT8(dsmU|}>0bymxur5|m&nS}$Fc=( zyLy)VdwYFo1JjKFLwElG9+Q8#-^zeLIs7w!t7tQwM@qQ6vYQ@W_`Y1J?0M&$agMc& zl4g*Ti@H9%x4b7vu}h~fa&4n7pL3M)CEcW2YkiAXzMkbc3p*{svGgE-!|*iQR?(esi+bo|TI$!j zcZW>3F|DkVe5n@v@_(gfo~CWx@}q|FLZp{)qAPLL%8(r3@;!dFb9y9t`FwP3H2(nM zj%!kszMqb8WetLTNvVvz>l@XlY&tCH*K$LpZ4N?tCphQyqE&5D#+X_$cz$R6zvg7k z3z+vR=jmN(qv70Ho%TzKpY9sdnIcqMJO2QL1MJ>7u}omdlA-?qz8L=iO6RWc2F{E! zwM36{)injQvtcwP!0rbIx!~@44)JCrI^fihL1ApjIu^zNtD3gq7UX!p#b{)M#&;Xh zf|%nd#C_qk0!QKq{41u1zo}jMn4{ZrDs|DsTsv5Gnw%$(Rr-jFF!VV{uroNIuuelE6b;n+^KgFt^fsd zl^N^#{{Wm+$~Jd8AuFpC5*Y4xB#pI~qXErlc5P&gd+T9t&a*|8xR2$-aI8D2uZL3QXV-G`tq(5vsj1v0 z+rculI|daGTzcof*1c>pii+htEK8iKK6A+?Stn_H&{g>aFd+0b-5J=y#>Vf2>@AXH z-5t8S^pZi0an28FitbWc9au@iGPI4YLhYMWi7oDgf&xEzAKl0~81=!d=~CraW#e%Q zqvcy8*EH=;KM`okE?PMC7*`>WNe6N3{{YwHy>e!FZ>>_g_@nrk;H!HH+59Z7P?(5t z3K7Zs!}0Db;Mn*_*Y#T@^W2BlD*qLkFT{nQ5fM)C<7U; z?ri)_uw6cEuVEfR$K07Sxk>*3Xb?yHtw0g@w?))-n>CL~*Y7l2fPdD(8b}EAD#Q5^ zKp!XkZSW_=0JGfdTE*{(be%YFn&w+&ghU$|*f$*T265jM0j=Vn)LQoI_9r(F0}~B^U@^(7*zB{?s43nwS?@ zySPH4w~gMzl~$3_UFl5~kCh^+kw1w407`RE5#Q6AJXOXSUto1vBnQ9 zf5Me2ZgR1mTB-`?&l+v@%IZ>GD+433cL$;8JlCNllCkE(P06#?d=C%&Bp1*;Rs_tP zvhN#T9l7hzt)~<{12F7{{V)0^?cdop2HvdwfYMCMX~O!g{Cv}cFJh1!l6+tt{GSk zi;zIc?~cEPXC&pQ7Bs6@xRQAp_>BM_gpvk7EY!)Q2d(@d@ZRl9?bnf&SZ!qjA~U;j z0R2D&(4yLH>^Mr&(CT&11jlveOQY&C+HW6le9Qdno>Z3Sp&IRI&O=W4Z2th-ziQO3 z4fNrL7n~E@IqOF>t;rM~>wNNOCGjHC<4o~ZqzP$b2(l{npyX}MWQ$j4phiTPi&6<^x)pWWkUq+VR)5*X4oiuwIQp?a%7<;v_^733c3MuAE|EOx_L=93cMhUbK2|+Iz#LXu+=(T! zJip=wnV%Tzk0MJH&@594mz~kDMcgy!Pt$|-u7w3CU35IGN^zdOP9k{~<1w%A1`Z_J zIOouGtgUTKR+^H)%^LYb3%};s`f*QjN!JfDP+6G5!F&8@-zFcwaYl^&5 zckX&PTC$vM`Vs2aR}sg#5;+lhA=r<{fOA~VO&+BP#!k)Ha7UVUhBDb^qC0fJahG~+$B4%c6|Omvv1j_p@pd~E2?Llicoi`LXq-#YS`~2 zwnmaw!1+PRC!iDoa9t9jDL(vvDfg_Ttj%F0(G=4vDPVc@q?O8Yv7@F-Wqo%Mz22Z; z5{CwqqT;k1CY#jsTMchb(sb*%EvK5|<;K-%7!Uy!gNu>W>Zq$+^3N3N^J{w4_m>AO z+fWZhPyipLb;3NcvFB8uJg&@|vIbBG+CKm>Q?Z<;)b)>q`XUUapiN+k@E@@Yhqf9_>YACA;YCx_}f^A!`BAqN=t?iN?g8I z*^k};sDt%VfC>O81J1ln;ExvSn&sW@m+=!((yZlRW3!6N zCs>96z+!TF1pYJt-wya2#oBJSX?dvpM$~mXNMCf8a#+NRFvmi`V&?YH+tciA^!PlhNWvy^d*s(;I&r4CVytt{Zf^1;)^CQNr^z=4 zPrDdB*!2GZAHt@+RZ0$Qs&I8AqKqE}T*2mDM9hBF@6`VQ5Cc7Za!IZnzNA`dzj^9( z;^5OwY>u+MGl;>|^w_0&Ce{4An`Bob%~7@?!5nqS$53-zwWnL!C`Kv8r*`^2irtM9 zTdf(&=-wW%)grrZF|B9woI;!s5r#luMox0TjP~|4qe`7i${K%NjVd|A-JYg3o|$)J z43_I|w=B1glEft3Q)nax00V*)5ywUqjBwJV?v?zJr8=BDD)USFxt^=^49G;m%u_?N7Bnq-C&blW9Nv^Mge z-Z3YZBLw#2rxg{kPI0=>^=RQ0IoaxAX&xunG>eGlu+;8jc+{%p_oxRM8(SkB56ZBP zCZt}HIvyIER&hPM;ZC#SZx+uT_NumvVQNShUuObY*#7_mo`FYl2771I)WcS(RyS(M z@^LhwMe@a-janR`KnO-b27o-L!QTNq6XBcmz82RyrQB`0Hq;~zsC_~zg+GWjR|8+; zcaN9h?}DY&VN{b+xPPE+hHG9)C?#C;Tg2pUpZAHJ;p1{Ra$x;f3$02oVpdUZ0#WX zRjfpc_RQDtH~dNbU1b`a#dJ-)!Nvhs%7w5=BUBxvKkjiumZZ&x_uwqs;C_BGd5 znuVp&qlHhMNj{A88)+v6qMALxjIKv|&QXqy5ux`cwFI|XJ?s|gzDXiw3%hP|2*yaR zgG1r37U*~WAJylw)S_r-UP^Ys^e3;@fG+qCOp^CfS5zes?k66U0qojgOH>F5&S(Pm zw|#On$v(t$AY32^8Dl^k4Tp&BtmAk!%R9?yoaEx%OwH;^Edq49<%|#*lJJVtx2Sg%Kj}L;AF)*V1w$Xr~d$2fHWhYRq+$Fb`c#jO_8$m zV-F^K`~DxDA?{Z2{-%tB!S+=K4=f0ImG9hZmiZ!hdk#r>eQW@F{1 zPImSuGz`wMuhTFka9=&SP!pS!QwRc zkuk!#J11kxymh5%-W}J)zlXIM?(K{#AbC_Ik+H}s*yB8BBe4~U$B zm&45v0u*)v5V!zNxUj4DOjL~-@wod(y1ZUj1uxaxam-5*NC`bDs`4E)Z~=ZfC+OF9QYkAQk)p#$~BCMHsi z+Bp@_;gsYbLri7Mo0YgCS3|o$J~$rOrC}bU@YlzU;Y$rV^G)#Xl(RuQLoMu*o%4qT zg>lpYwBU|2jwuNG>Ms*XXW;9tf5cGRTSEjUaq=_<0_Q9=+x2)6a8p9AZmgTWn1r83DVJI}YT26_z50vxhWRrnqS-O(`;+ z^}F5b&e6PxH{pVkGCvC9QfVDhSCQ*p7=qAPC7e*HhD5}G^SeKLB=xC{+p)fiCzW{a zJs(c-H1=9%{{XV0jo`NJkKIA;2OWLu(E5^`d6tawr%^^$OG6IVOovw0qK*rgyrO>Y z?WY6lSXFg!^!@1G-Fg*GMx?BZy0?a{;n=20CCS`KesSCYf1Pns%z5-tvC%3t)3QG5 zI7r##AyGz4F~9@d*U}zAvaTV-1Xwh+U^emCDS1 z^q(>0`<}mza=p#^5AdJGXrsH;^&K}w)GwjcUMr&%F$mThffz|f=?a2AMd(jEtCFPQ z9VE@;2}@*Gi^o17)9tkw?DX9~Pqn|;w@iM z)*27&uMX=|B7^?6+`tZd{_|~e)1agANq=64WM?jsW^8&djIKY`=rG#@-sbK<{gAa? zsV(LB6?(5|{v`>a*L2Sj#ir`(r~KB&<^IhpIY3)#f=aI>hW`M*O*uxNCp2y(=BLXm z8dZU*pRdHX8dUcFYQ-$8wiYKJyy}?u$OrJPDLz>z*ounrX!cnCWf>Lho=G|nQ$Q3o zX@r*YMHzfA-YPOru>Sxb=h|6FZku~4g=Cry=XTQ|8(TQ;JN|vg6s|iLXSwsO=17TB zP>sWqryksXW`-jlN@*Hc;V#A0=WAz<0PEMBR3V!wa!~D+P6kGMoDx4CpI>Ts3l_-* za;G5ophlH`aC-+`UrKny_3ar20C_m;Uqo`9)o3HnGN6yz!bC7$CpVGLT z9Vxj<9h}Of6e7+;#Jct3O!{if(c8iTGAoi8j^y|B{3}>SFWx!oN>TmaM0(%shvOLa z&xeOXo=|V}S22YrmVt?6KY`r8fc346k88XDG=-H|n2QXKg@6630In==VE{p>Gbre@ zpl{cMSvqf{9mVo>M&YilP=%neC&FXan$$wrnRt-7X7b0V;+a_@Mus<1^%?+GNAIX zDGcZFJ6G{OlmW7C3#s{2+lu)3)wq<=1?0!#9sG)5cwK-Zz zo&}-kiK%$%$_tyLG*jHP*=Sirf-$=QXBa&5&3ibC{E(L-wUxKN`g)U9a>DO+`l}ag z;?pm+Epj0dw6(Ojnn7v~!HnZAj&LwAqt?Bg9sPuPo!yQJZg5(a-NvfcT5YAST^WRN zL<=)BHgV2Rujf-Zs7cMUrB!mL8fk2MuY)ug{6FE??H(xO)M1FV?9h?8NOv# zpIY%THJwTMbUSITNTfSSuzwL~w>HqlZyud1mNz0Z`_?Bc$PfEjJH39D%U=@d*)95o zOhQ+TRngu<5FnS z*Vd{~TBLM3v+fu2rOv8!`xxSbPPaIfVo<2ec)$bs)jf12X{qzyh%|`rHQT!ci8rZJvHAuQN#W z9e2Q*W~~WrCsoyS2_+t4iy7ELOLLPLIQ+3&^4mmnb9X!+;&;POh#D@-nXjhTw1D8X z#8OEsLb>IhCM1E3@-jW@WlrmRl^NTiUEjR$UFO1RqCMrG<#-0W=NXV z%$SKr75-8;931gU*LK*Y4>Q%RuUEs`4Uf*Mmd%2tvAYAG)SB{chtLrp_%^x30=;5KjQV(?N?)-&$y$-R~h6t z{r5}SF2SiapNuXdY{-SW=M6`+?j+hi(34!Ww?n!@0W5$KQnH@Rvx2n(fCjVelN50b%5sO;8_p> zuoK89gY0rYDgg2C7ey48?`si{U|=(`hflA$pbuiwp^Hk=tt>5wF+mtmeNS`voSFc+ z1i&~ZfI4jk>00GLKf-^N0DgSa8MUSriXac(eoxZ1j)<08bPbL;rUyyz_r&t}Us&E5 zjg0tPh(|;I&>o}ptg69D8_=rh%gATMpB2yI?OEeV8FXuRA{ar(nn(P!Z?9q4el;}d z@~uZ+yQu88IX!_e6krO}=P6!G{5k#xACLJJEsV;z7?7V@mIvJ53~nR3@ZObUoE6=@ zTae($=N0T`3;m*R)AC1^mHz;`L+AOk)@{nbqBvDi2k?P`USn6)o|0#Ze$aYPk#nc( zR>`%b-306hQZQHX#_!6xYgwL#6}aem_kp$P>~*+ZL`NrSEZF{(sYNGqs&$)>D?P(k z@qU@5XzO{ZT&z&WH*8*6&-YY!HPZDw^%uFo_#fgM>pmjX^<7C`D?5Z(qP9blu_-%o z*taZxq>oDVql0pxrstnJ%i4JwmLDCw9cys*(p&2`+~B;>p#%Q;a%+NkYMV1vQErEL z=i(oRJWb%eM%PEw)@zvpZHUI`+(@ML1F$vKmSO5c6B#w8zmq)d+N@p@alX2KXz-Mp z8IhDj8k5HFz0cR0@>%R1?ZwhZqu9p+qHT#zRY2`rb!DxQ)kYSL-%_eO&4~c#Zz?~} z)|-{1&0{NCT%$bFIojAGIj$9$#k(|a@a&Q|CD<=P)9c^)iu9JM=Q&SNovq;vigxY_ z*z5`5pVU;(;Vv4<8yXeKk$%j~esh%>>T5VVI~P_rS0#?-8;NC(2U!{;hYQXPY|+k{ z>)#fC*{{Z?5 z*Uo0&$6lZ2dpHl_e9xRTpBGrtE2%Ph^T-o#a6#+GY5;=nJDoM+ zic6K3D5S6(Msd#+0WO-qXt@s~ZdC1#CF+=kwY^Wo z+EN#|xxJPV{{Ss5!$=3$Xvq9Ppbn$q_PMHGN91ajccD4ibu-bOy=gk0m zcfoyD@?A=8Doe=)nnKe@78mbsT;P$AIVS?Su@P40vDb!^zb*7V{{Tpt8rfnE^R9S5 zTHy*J9ZrpUZB#WO*w1O zny;2Vr_WW~ai0GG;%SuJ%mv8w007~`L zR8^79dyTcYlFIfQm>X=dNU|e(5OOI>DoLg^?Cy`Gp!kKSPoP6~fj-d4JjmIxhwcFT z$MWtg=IUXT8&YSrN~)B3n>>T!$B0I^re;0R6p%m2rFV`-4>=ukTVY`s%)=2;P8u`I zbnBP2y@GUAc8W!lYjkWJ;Qm$U)Thq}3)<-5jIAWkS=at0{i@C*r^RR*Pm)M(;bY~d zIoeeBCA000n6IA0UJb``%SCI{J@|LdI0uc*~8)9y{`O1 z(RGnyac`q(*9&(oB72KXD4JMykJ7|}wSbRs+s>;8!Q@XXD%goWTFxan`XKf4+ zjut4CDzAP3_pgwt%~jrVZTDir@eHuIs+gK|lIOOYC2q#PiE}Nkt!=24-Q-BJq7%W# zYIHFlRjC@0S81Ns4=u#!bsjGjCm3%Pd#^hy>9>*Zei_$owc8OaF1~sy`O$!IjC*8` zdK&!)F3c(8sq;nZt#z)AoOy-&?Axf6M{^MK zQ_S+_;HFb}IAM@T?^lYs@e?oK&N;Ib|0KILmZ()kK~V;4L~h{55RFm@}7S zgMfZxUQQWanz`#&ZB%HxswP+Wa$r!ui7sbvlBn>;e9kr_y3{`a*+baynp_c+(q zESF5WDP)mBATgrE0MAZO`R!d6ZQR=G+9Q|qZRU;DAW++|2(>KuMP2^A)0>!=5e*?A3AzUeZ~4$j?c1N3qZnv z3IOw3_799Z4+($BEx+rj{zAO`SH^t~Rs0w0{zuOc!iH=*D;4K)72(DT_CI)Qsh6t- zk}oYt3ZNFpe`@2zB=kadd!BZ)rk&zgr?q3hcGgkJBfT7swFeoWHJL)3C(ReB>GqJ= z-uV~syRESU%uu27evA$)!i=R#e3cf*nFj=})y|PD^vfMSZC-h&NL52c8QT~quSEkj ztodp`aTwK_c1c+Aokm90JZXP_eH%ZLN0`{pmT|(LOkn<1?ZTBv;ZlM-a@v@0tR*(N zm*?2&EU%VuvD+$z{_`Fyl{bD=kFSf3u5=oDLl_dsOwI-a6VQ8lSEoWTkG%C`ZM_en ze0AZy68ldvT*c)`2NFiaF#d<}7295|mgnX;99|+1N1^hEj&x}>ElHyiiC|(%NI1y% z9<|E}a~|TvDv`fa65e?Bfb5{~a8I>22|bPDUYvB3NU474@*_g)xO5=ruW!@!tA{e& z!o2C!e(OxFD_lzpm%xu3n2$kMd+c)iD8V@z8f><4z}tZ`E(ag(=fAyQu#}A{<`{ZP z+rR6%a`I?Rub7+zf-4S7J2Sdfp*ShWW_14m4}2*8BGwisEVi*=$jj89LG|XP!MzcV zBNC`a>vQYs^bd;)0P|Y;Q|E$!3IHer(o^m)(!Ql^eFE58V>mAuS&lOyzZf%sKx_>mQ+yDqVr8xVsayqDG^TgCq*>7@m(jba3mU|-z zG3PkkSLs-`+di6}3Y{n@!>3ZMdk5zMKm`C408jxy1ppKQ?RQhyTcSL$NeL%vuF>-! zVn%6VF$#=%q-TS{%N0>V3+LG6=hURVmT4D+VdTW4vh^qGcprs)?P}Ai?>2qD7Y$1d z8&Y0gY|8O@5ok*UvNE;dF-Nzk0ZAv=agWBH4jlD;2+XRwbS>4MEB&2zLb_YZLorqP zdB_>ZJZ9`R=;+n!Z<$?f%_obT(NjpotF)mSRE2-&W zS32frOxoPj-MsAEu1G497RgY1h0ZhhaoVmJ7_W(h^Ep|@3+6{{eJ!knp*~UIt7mWJ ziu6;q$B|MBOWyv!1ER9I7gpQ)W6rN2Y3*a@pG5A-seJk^{pp`2H2?sL8=pwv6$mD8{3weNnHvki#?q z`L{@6Kp$3o2ZbT{U8giV7D=R@MmXx;V<^wB3MwVJ;p5%wS)Glk)VJFC^I5Q6-)IS( zpYGz8hBNk7e5v^wEg~=8bstkm!6x=Rv-XQid!GUf+#s6T?l}Zt_%{`UC0z0P3#V6e7LnsmoTYdLp00 z?-##?uN`EJ&1G?qH3w0T;vW3|HPbjLBLyaz?z$$qVXfQw+I7N6F_MP?*Xq4%nox1v z*-1T(K5@=JN}CMwe;oWCxYEQh=yEmb@}58)aO5JEZi5`;068R%qO`ZWXVA@jPF>Bf zfxa2=hl)HuG@7oT=jzsP<;}Wz04RAz+86=GNBji()F{N#QjzIV_H06qSk(u!RW zwR^MTUlHo}I>xi8>KBAH&FsxH>kt@uUZXtk|R`$ti?H#%;g zJVxdv3`s+{vEYsXT;OD!P~C`Z`wva=4UVb2SkAK)IAEahz##nyBL}4`vMh@eyi%0& zQ5>P%yO%gVqLs&E;q|-Jt&1#(TVjT64B#B{NctMW>6+P+#i=avs?8E1JQe^}brsfz z)Lo^iX^Nr&9>xpzMleTT }WRYh5%s!){O(-PmvRCl;=$Em^ED4llnh~bA()@48K zdnPJU(Uh-GnAE<0;GHgrw7S{UFQW4q-NC?V4(t!9=~*~R#<8gdqCJmKy@cArsVpv4 z6dx^t9V()^RgQVSX*OPh;{=spDUy8gbGuB`J$T1ZDt9)+>%1C5!<)F&ramGEdUC>Rhdt;(_ zig8hN{wr#0_#PV=WWSSFws&QPwq`yN{9&n9-~+e5YZX{30AQPb|H zu~)maQX*?vB>>1XpOlrrCWDZSlq$_fQO6%KZu^(R-E3=a;ToQ zH#sFLlUHfC{$8y5t5&o72Bm9$qxUlvj#2*5=zkHB_zJv4d0MEt9$pfD(lVm@oN#|9 z!k6-myN;D4B$59BJqjj2Hm(>xRVU0UxubH!rdKpEiYJt>0$GC!foVm zen(x*59hZ&#=A0_p2}{bH{)2j!j&&q`5i-O`klmY0%{r*&`g8OQ*czsKA;?T9^m@( zUr7vh9XsoFw%_Odeh25%%JFuyj*r*;jQ;=;_;bV;I&`P)8bZnEdGdKTED_scCn2L_ z`~daj=Q*sZ;xN@B;I7rJs$b{kT^u$dgw;t|JNfVT9L9&QT*s>|p03!xfEd)^Dv$um z@CSZ#ius!GQIqA^`pPnMif?n)JUej()|y1D1hFwvGuZME^Zcnt5aAm$ixomlePvYB zZ}>NgiU@+BGz_F$>F#dn2I(9%Vl+tSVDx~|UD6FA-QC^Yoj&{hpE%Fi+1Z<&z1jV} z?(4cfb^Q&H*ZW9|vb&S7Rg!~02IWt>5s5XMz810j^S6$|p})_B?(ohRkwODYZQPzz zKu~&6H2Ovf9%hR^1{4LLZ@B*C-E6O zTZ4m2W7_QF3)<#Gy#V_T_O!TUci z8{BKUbtlS~Ai$;8(Bs(q8OFoFMs*lR;s%}3Yc5Q9%LM}+t9!ZWL9F}aR&1o({zSZq zTUOc@bgFqBGnjK>Z1UO{OM+9kvVqqm&4fmeTSPGx#JRfG^+DFhmT zJV`{OAIqB;GP+jx41EoNEZmnyKp{l+=ch49{mE>H>azB^)Kl3J_W7b zBvQlF4*)OP`qFx~miMP_B}+P19V)$!?ptrZAQ!0*>{|5_?;_on6%9Kb|2}AwK5Sg9 z%Q3M>*3vo3=vw#{X1f{xPWT{~tb-fbPSn>uTDqgCj0(^D2&592dwQctAvejaDSB?& zG~W<>vOy(7(ey@ocvoDef8P)D`Gz6UF}|p=O!GRcIZZ7)mNXd1E>i)sx|Xxi-Ay-d zj5h0oe(w&axB;b^M6Q7r8WZT$QsaN@s(97OnJBlgm9FgJy#U_t_9Y!7Vs*vJ`s^}e z$36#)IXxSg=61)cnpL(ukvHL=$E9n z{l6ZRO)eyafbzz_T|H{6t+bfq{&B!J_1viJ{&5rA!o~Z&_Bpktjt`%iU#P%p(mHXX zmzD0%4?*MQ;P-tMeDfMkTb5U?wKxFhQTFD>N1f717A}mV6U;{`*bO-}T>5;QhK_Tv zjif1@hd)YqU?#ABAi2+&_wr@$RPno_Oe^|UxfLUTAigR}=V3uH$gBqa)kDazGe5s> zi+KoPG>fBUYvz8Fc?yU+2er{t z(Z)+EEcw4IU1!3cGOOGL8IU(?H#SD@g;FNTumn8^y<8&g1q(h548Bx=V{Wz+C~Yu6 z!&1F@DdHnDT3;qTA6+X7|Ey62L-^|jiP(noqP*g-{8QG2hUDlOtIjICKnbcbrE z1UFyx9_!FR9dnL4g{j0jN-r-Y#7nqNBSxnmHOO=*ylV@}M{0dvYR;O6TCQdv)vMMy zOiMB31uTc)@N0gamjHSMSS50<&yFE3AHmvfV@K=i+idV$i(6ei>lA{C6y<`6qUQ}i z2b@Z{4rUX#&^!(ZC6}iGI8<*9dd*Qtk5(DsA!84m6=tP#-R}8IQjS2ffhOV?l(9#` z+ppZi1~lWMxz-H%K8};@0#fS$BAKbr?Jyzris%gm22~%!qMM~}Wgj9&ulQRKnVE$Z zzZG}8Ie>5SDW;$3k-bUG{~={*cJDCHml~$|ik(zVd%@)fe2aq4HgzIcEj>_^YU4vq0#@4b}ybqjrI$<9grza5>- zBLJg=@o2TzTm_XRFSX?;0y!GE<@cs-J7$pehbs#&-kpfY+3Th4Yd+MP#f<7@p!VNi zdu7m+BTozbr^DIKjjy30H3juM;N(dDv&kD5LFSUmo>`fZ|2q%;Hx`j9>}w=C6c5^e zdQ`m#8Jw^2NF&xvr9bho^_c!$@sS3P*{G>K(oU$_x0>12JO1QesHL~DBu~Xg95le- z?1+~%Gjl7vXtDj~-H5x;M2$lKa!ReKdRseGOL7+t{ z9gidx6-4D6?QtmE8Ww6PV=pYik!_WBoYyF6qrE`@CHUfzuu-Vjzo+?AO2-rZ8ffQT z4`u4Q8;4;rvEV)j;IJ?oD(NpMsoc>2hlrQ;#C@>H8_s36^<88^f zKL&8^^Z*h5Jwm+I1SdefUxUdfk^6gM=-!?_HKBsA1e?;c@jqS)XM=~l9>W%dM01Mj z$!iHGYJ{G6Xer&;IS@A&!MGNQWvv0xr)om z(jQ%C1icUeX%x9MEf2jNhy0@*UU8EqcqYpVj&ONaZ-a<6>oOP(La*K@He<46pvs{gAz1V1Lwe^ZDPlr_|m58*fPUK=A zKVLF@C0J_H1qkpc!%|k^oO3g&de9S@LcMN#N2G;`<=;l=3{zMAH^`Bd`xz>)sFPR| zk8N!vYo-a5btGyQujYLXvr^qaR(S)nu)zU~IbScPEpV3M$*)%*1Y|k{?*4q{p=Fp_ z9iPV$kp)4jb!ciQZ2Nytw=j5&GSxn5YEt5?GH-w&qDZ6(V3515>C(1)ZF6fo1F4N1 z7F;vZJ59}s#tol6y~1rav2+ zCQPX?5Z$&@PH;zWBGYBNfW7_Y{Z}uZ_rGBm6Tq8oQmlsf1T%HRb$;Yu1qD1e9LHwP zZAFS|#m(%i`n;q}8S3sq;MvYz7^_@<(P2IuazcKN)92Z@7T?P#C^iCR_R&x`TIAt2 z(IXgPB_2tT0?P{U9h%IoFV)Eg+H^Qg2VN`P8`68X=Z@^OQ*rQkyY^g+96V~LcHt>o zRkh|dYlrDj`pb`%G&pn;yt)u31z#TCXxq_q?B&8Mt8A`$EQn-hPR#BMH4_gQ{7d?c zXm#aMXzHQQr^hqwHcnMd?ocPTuSf`GWpwQ_E`rLNVKhu-T8RA7VqeNVTbO|msj z!fAs~-5>V;{T#aEciJ~jMIS3u#O)5W7)@oZ7voQd>jG~zbuvO~4v9juGzezzaeCG;@+aYDg_HM6GHeds~y|kjQ?^@ZE=vd8io{IrXyDoH= zx_UNK)}J>d2!4!1e`!5F|4{i~qQya|*YzTx!ZdAr>j`Dtz_k?XLqC8^s^VJ(F- zD@NK~Jw81g^y|G-3pPU%QIr<1;^>O+bf5AKbk>F>0DDO5nufZKH+Ne_(P=rIPFow0 zW0(gJ{(%xUI|U&7pDmB4n(x8v9>We`w=P8G^&a~la3&_x-DJKyR!4bvy|uqRw~$_r zk13=}6N58}-92_TuxOB3bqIU8oEdv(Wyb}BC(88CXnmghI8<>M&_bEG_p$W%a_i9T z=j6%Q&kg*~mT7VG7)}bd9=#n=T)bWjU4fqkjUq@Al!kmiKb1^$Om0Ki4#0E8X%pK5 z?3zXc@BD=L_~mdj1QFsf?BN*cO}53L=Ls(FNC#;F2Q?E8DDSxBdlQLX*by&DfYlfD z0*+i`7d883+@8x(K#d;8$gcdDb3{QMob>qJuLVP)KF5n{$t*qMYZ?@!L z=rq7LhI8Bvjj#019Q_bh&Y1N!m!RqYc;;+sV>PXsqzky;6~#~nzwsa=Q##q`xE!e7 zQI0cXCGG{=qwRt8yFt_m=4PRv3I>os2fUWm7ejcVzw5=RKStfg`Ednhf1^oB@~ zIMQ2y--qtH<#|uc+*iUR96m5F1PTV3ZS$&Jy~BGEMugw!r`~_KIM3+12do%AeM@fR zMzl9H&$Wh!awt#2Lqb89{4cGlT>?Hr*EUx;YptV&x@giCQT^0!y&NCpO`Np0mEY}l zsQ)2DsL7k3-g+~u5-B&HEs0Q{GYdpPLfo>wF=U{^C-srfQX&@!sDYClk=|G7xf_C6a zgW+B?BSI%@!>xc3* zyfM#O$GhhBz%)gD!-|=%{kK7cXa$_W&Hpgt)T9%xd|NJdPSJ&{V;^vBRREto=DayM z(;e!(g?<`H11Jq^Du8O7MhpfnbTf$WJQje8*Az?L1-{8~{kxPI22%S5!MzEt^GAo< zcRoFQmfx$syp0x;wL;hd``ra0px1v$&vk}}ddaKnPa{L^ckL8IhkXLS{~tapdxwyU zlHvWI7;jt5vlokq|LH=#;wP&=;Yx=I_#rG}#!WvQ&*NrJoEG$=;tMR9T#eYk!7xVw zSprG=`uVC$UPDaF8I9YUVITf$?N4oBJ&Vc7JdoIz12s8Qk7*}Mqu(Q*{eX^&{h6fm zlXP7t(|6I5Vvs`erZRIdQ+}jAjY9qJ*p+1>&$FSEk=}FaI&sTrwjK?QS=jc-c87#I zGX|XW5JQE28#G3egBHZLsjc5J=JbS{#u z#d|M7J(a)8@ueSOS+YNNL1ZK8oz3w3Qfdq(=}BkI$WN?9N31qCrfiVeL8fOidikS@ znZyBDD6FPc?ms(j-aeymJ3vLzjDkE9f*u{VaGWlFt7nMvER7}q z`mrzOq33KfKrmOV4Za}MsXn~}kD3dDlb3aPmiUL^cV6mRKOI+A%4aGMC7H_@#4kzT zJQ+!UyQLH^_!};nWe3Q@OT_Z=1B|q1vBZ9tvA!x z)?^srT?29U(SB@!@~q7cZr&M}(l36r({=GZ!)O8*HmryXoi%zf?HBs4`oC}>6536? z+7KB7Z=cOkq6g1!b&^ie4FAskLpoQ#mJ9qnsP5bT@~Z!O#yOENZ#BZ%yWYoe!RxP& zNUejAkk0Pk?X%8J9;;)MVwbeN75&i)ygY9hKj_lc+^X)>6Oo!st@`KbkUi?;yJX{f zS^Mca;-6uBt9v(Pk_;jJ1JYMBPjlBE%U_u z2k8>F0UW7XX10ET8Z=zkt+JTZA!7^2-x;hmDp%%|fb5?}pkGyq4;zWbzF!TiQEpOE z9#NN*tS&96 z`1zr6iJ_bA>t9>zrq>!S@s5mMq{|i&J8&HQEz$~_fMMhFX@S;T&C2mF@tSfZIDK`2 z0zIi;z7YY9^X78{UF^8mA|uzHZN`V`2EekhI_%{}N>DbHU*pevC+wu?3I&HgcrA&n zUz1epwer>1{HJBEmkBl}-?f?Nv%=Xv%2wT_YCicQ2!$OzAj4(BgkshYNIU$9N=XL! zZz65_ZP>-@&`!`fTk7#un4~>GXbT%5$3*CGz8Yw7-DOaWc6%A$^}dLZ-XPo~8S&2F z2HlMST2013ARRvuAbuqYQ6>ryCBCv9QR00VHo0sfcRnDU7eD0u_@9DugDCjZ6=Rx% z0z)Ax$N`D3MJhh#jI-^87WEZbT3%v?fvgrdn^_0#1^!F{k-O@iT5NR_dmUpW`8Eqn zg1DHXPfMx3fJX{SWm*&Y+|j+~Cv8mj7n&&Kh6cb%bNUS0*h^(4r}|4p_S>o|5z0Fx z{1V#(t^m>)!TO(wJf}hR7ngx?7n1P(y~(k@JM$VZ?k! zjN7g+at0%a8!BbXq&@6{WD}7eisZYf{!(*}NTsG#A$Pj8;y~{pOl4G?rzm`^CCh1{ zX5q}KwGqudAUP={)*6<@RoRrD7*c6TXr5kpN6%n0%)GGh1dKJ67G*)&!uFiXzgGHL zq~5PpasIjM0_@xQV{x7>Z+r9To;P&%G^3Zyhq?k&@dB7OO=IdVP?w*?X75)6iuMD= z9eMkX>Kr;MXl=L1@wcnl-?Tr0 zVrCJCt7uB}Xju2Ax`#p0ke0h0`?ao$`u46!>40ZiIETNSK-#cIlEj$IMS}MoCXl~P zdlIxumzAHrW|$gw>Uqk=H`zaITWA~$>s^NBw}$BsA*>u7c{pGNYO}DnZjDo2?!UBC zcth~W0uJZKHaQw9J}dp5)Ym&WM`aGr4c)_)%U)l!;zu{(V9h^}D1nJur^QD$Khlnd z8mwygvtn$^BvCvu1oixIwJ0DcIxstI($7d!N;0diD*iCTYD+Kh;f64%I}~eC?|qyb zAJr3E_(6Un4urY1HMd;Bu}uGzejy@+cx^-kCvQF>_6u*qepvX59a_Lk!=ta?Q=y8{ z0HiQKglwnfvgnIE*!oxO2>4QC>gxGxus=W6YT6nvijec#&op$z>$*7lA#Cmf_`1`u zW&+5Z^J$4_8(Uvj5pI~^;B$ktKWgjEfHFweyf?o8qli~o!8#?Y5Ugz|J6-Xln6D{nY* zcha<|oLiD|%F2v2HB{%xloLHDko~}{_J8o*|NY?uqOVHB)cbi;4q-Rj8cFTBiQV@w zh%=!KmV1t(Y;g!x8pzoXemacCOlc&+9;Z!ivZX&4C;pW$-(oQt-LB*0N{`jB`blv| zEl4!42@}e3EY25X(B&an?Uq~GZiX7>n0^RP*}sR4%l0sFinw{Y6)iC=@yU^`JMdzP zh`CK+*M%q)?c**)a?auojOn-7>>{*V6u*30T+5}W9e@JLOM7&=H)gsS80@$&W~Dna z@fJoTJ_(LxZpGwan{O@|T40|8&B#q^)1u(j$YOLA6fV!xyBdXBfE zh)0_rHkcs0Yo@eJtE*em-Wq!s%%_I6xT-y9@8U+?oj8_-&9w=60{hZ?MJ5l=*O=<> z2kFc1AMcPKvn~yU6RmFb(;P;}-(xQ)kJL2b1M{V9hpD1TLg+Y+;w+i|9 zE`dYi(=fK1WISFQQ@oq2rgU|V42Gv`pc4x9)?e!_-!TJ$>%b)Vc9znPkxVG3yVR&c?{kGt%NMV02NMy9Q9zFaoU(c20jM8Isp~Q5_RQZ)6_PqboVY94SOd*4T$%))qHCqqZh)Sp=cJ!%HxC@& z58|hWo;i;C_Oul1wG_05f)d09d!<_&VkxmDWrUnGUd1D5b0pGPo*$so@XEE(_XbP0 za;e)I!fKsFNhXoEdu)fW%@Sq9Whr?&#qT?bU3fZ@1qF9IBLg=K>e13&LuZLXv^->$ z{4tIrZ|S%_smH(XxZs&gJ~2l*0@(v@BN|>i_IPXxg;pq01O!^p%=CtJaj50JXHI(l zm{f4Hr4@3EVyh%U{;F(hUn>^&5CN<=c5NpY!V&E;>ia zs)vu<{i@>m+e@S9I0xA_&@c%~FfCTSOWJZZnnaPWYz5Ghb zA{bHzKC9r<{<}Lvs{&Qs-!>sqZ9}ZaWZ?HCuP9lB*hupgY!u@UWe2Fik!I-p->BW+ zH5YLf6%IOgTH3xf6z0_&SI#@i%=F@9!#>B+mzp|k`M9CWB-m|hA0h6Rh<$C~?aeUS z`}06OsRr>ZR3@0mpItpi89c%REXww~-aWcBih_Ylno;~r>NiSxdC5jQjX7+G=(Dq= zsl<>jZx&|f0Pk&7%DN6Sfw41REU0B7GuZO7+h8GW+Np^ru+f?`RYSoCC1dY}Hhf}9 z$6dli*p&r;u}9IpSMNo##mmbfB}&OA1mRz`zgKbKYIfGU&F&pdpHUNN5Y5}{Ue6Dzn0>gwzA4@q^OcGF=l!Gl%l^0A(pdd=F6 z%}}osQ~>xI_y>)yub=7u{HcU;;+Jwem*&!9;!$1+xOkvLXmcIQL5*hBB-#T5K`%Ba z#`*!qeh)MCZP_x7JK}k^SsXZ1&R>=)kxE6_&*6M5cP;|a z!|`XEQnu&rV&7t05J#cW>i5lks!H!Le1pvg(w3E_#?D~gmDyfexC0=966bdn1*Z;p z^92nvM=x=P3J5ftz1dl!BzNvRJkz8`;>$}GS?mybk!mMs>qAf$*VM!jSzaE@ zGy+Wmz66ire#cA(-)!HWBaLeQ_wI2`g{rej<1IRO;L@kZE8x={u3kA2_)y z*EvMCuzT53KDYFmAKI$gNhwY3vJ@*lc{YA!BIkp$i%eR(!t(r@SvHT(0e zG&P|nwk(OeSI?F@{+CLj_GQc_O;hnjS|>iX-x<5mv7*yJ{*yxGnyDFd(RgOeR&m6geucb=7`eS|aC*)^(@C2SGFWzRizVQ+UJKgT5;slp9#q9)16xsd6* zphR$QA@o@R1MRjOuKew{`AICbd$!oe$5BJo`uEKWOOS>mn!B*wdd1|jB9IK7Kr{Z7 z6&Ij&khM3blPRG*GEQILPrhFEC=;9SHJ_)4TajXJ`EK?RXJ%qmqL~b+`0n=oqBxEu`S)k5g{O zXR_?~s&|F*hICyK=48PLl|oxv#gfZEsLYBSE*MfuCjw|~o?`m$>JIQPpbF|MX-u}L zXZIS97e{rb=R7=Urm6(qLu9!_Yd|Y>cM&>#4mUIcW z(Qu%c*A=UKym30J1-!$Q^2M|V!-X6AxC>j_WV(U%<`(>Q(v&}Mo&*jjbAkhb2OzZ~ zCV72H#H7{+=aUL&_!W9k#VkIchP3)agfz&#p~;SeNPv;b(2-n@FXQ)Ld;8VlR$FrN zTgtPNYwp4V+~tT8!O}(eh8!4b+`BC=IC&+sX|T=B-~<=XtN1RMWL4J9pl27nPLedF zeA~)~h;~V1G(E9Wv_RWX-~@7L)6lM8;7UI@8Za|ps>CTAsZVl!npIw+9P1Y3pGHS1 zLvqI`S`XvrDq7X=_eSpa6udKj6GDs)zS+O~Fk&O7!&+Twupv{&F)9P$W_4!3aV}5}2t!tZz)xRGA z53X7Ht#V1NG|8$BSJ@$4~{#<7T1?Pa)s8EPq*zZUGAB3>4b)V zG1 z2|CPbE2~*JGYLW=>ox?`*tyV_wSdKwa_=)CokctpxuyH$?dmAcse>A}6D@Ws$I-J{ z9Ed)HweGZqwu@W|B`|wh<<-j|8M4sr7!AU>y6kU3en?749^su$>$dBQ1xM*2Z+tx? z^q88zkR-@kf{Ly~@f+wO(f}D+n#COXNZYk?o42dqh_@>YsmBJ45F=*o)fsYxgk(PI&GU3c z2Gjn4?^?w|#+5vf?y~9Z#$V@lNIlZi$C>ac1+U<=o^$3gRx6NI)~QTX+P+qjAT2^{ zXB#VV(tvN9nc=rmWnj-vH!N^UoI+)7fOJ*eJFAw;w)I6JS`(;aWNaD+@6PY;i@)?} z8Y8fe^{%E~VrOf~IKLTn7)iJm_tub8t$Lk~-Oy_}hH<&W=&3ZayqgPLRQLgE^;(OE;pKF^Rj}Hxw1tJ;MzYczks;&AiW!=co9UpV-%A^AD=_FZG zP3R{k?IOIOFif!J(oL{-GVj!$zQ#Y{C`-JFN$5hns(-%};a;;qG(%TA4o9k|jPWG9t|wjY<0QNPnYU{Y zfso-q6N%?hbdh;1^wy2&Y{cCTxL{MHqrFA7JhxR1kl{F57yP{3dH7|dUEOe*nAmNj z6`$m4R3u4`^=p*tcNAAObU=DL;nTA^f5exHtKP%~txr|&BJ9?CSl{m}sH2hM&RMH~ z?YrQfMGK`yDN_0FPod8YRk`jPyg1(R_Yk9BRMXCVr!~7yN0}!O^jz=v+!cK5t`_x* z${DSV);)hEYHgbDsec48q>(-O5fs@ykne2N>HrXK?#?#6u-;eiW>&vS?+tmtPP3Gt zyl_tX_S%HRz6YswsSxuCFBG#kmEYl8s9Q)*Tx*e#AGw%+tJ5WhekO)EzVo3!QT|(v7ERSp?Pbawg4aCAX#2Gt!Ufsv-#*00dl_>5FifD4d#o z#|>XAaeCwRNubF>C`ygTReVal%pEg~rlBTmH@#E5S#gHnKhkZZ{MJ=cHZ6y!-lXl0 z&6E9w1U9lC=vJqRSRjs`eQs2$_*xB{`LUfI4Y1%C8p-M21|Dl@!$n496W3<60t!(1 zngK-a6{t_D-ldW~oWE;WB!>_N5j!6{EBIqrP8eiAK?|&0=v$?m!aB1s>NgO{sny83 zOF(gKw!f)=qdF;&cY1f#ejhybhi$Af1n2;|*VAp3rnhV3l$vBjT=+25dj+P}5MZ!q zg#2b&Tm&b-V_|tlxvs+2rz5XC@X`t883uiU={2`|s$SvNFub5x_(r*^lrKf@d;fC7 z*7*nn-n->U?^KU8=Cbw2LHyE>e{8G<@F#vCqth*}o^jun(--~Ktc!dg#*t8gLDb9- z7EE7{5!EH?{?6bdm#R%&Ts+k7vCmqim8-J&N-SM(wjwW_iOING0gBbBFGvZ{a5Lq+ z=;c@+A#jjEiJb|f!Cxi-fus>c^wy?X;~*)iu^CMBK7A*U_`yhB*J{&Hi%2+HLiVUX$_8^_;iEY(4xE zWeCg5=dOBI0yUn6Y)K^0Wc@_5<&Pi!h;@UkQhX6b@L43Wl9~bN}J`mg#yYiRsER_vp%Wfp}Js zdZxXaeNo%Mh0<$Mejws`WAP3rej~GdFoZolcCX2|Gqsic04?-e78CQhQw(1TElS&-p z3?eX(pi3T@RJiNmt<*%y)u53jK7v_5EI_e?@xT3LuE!9thy0Dxf11@{UW_%wTA#mp zL+B~e@TME_yxrTM`B(@ThFWyC-xGXB*je)T-U%V{L?LPw8N8whk8gIS5n)(k zI)Q&XPlHiM*#IDvKzF`3GWd2_VHryG~@j^y%aSXYztZ*gUDzl@|jv-j*B z9WHnsIzxos*TXpt>Wq}4y5%P}`FVn-DT5pqAkD7!PwbD%kje-o%}z{q&e| z%sk<6bx+vZc`)H0nz!4!Det;>7TXrgE@%D!5gla6-G3cf0|MjPe~LmWK&uORRAcrha^Da(WoBM`QGD6oG>%}?V; z&ZEhKcDdgDhpVXnkhZkrUfK-*A&KZ%44eN$`cD82u2^K!<8jC*M}1?Ke0hbWnPeV$ z0#QBV44!HGT<;d;m&zJMaT3gfe330)qF1sZz{{X}D6^}4i|_onjJZGjNrVpYZNoQQ z`k{LmrgP63YyMrBC^?!rJCQ6N4Hyzx^m z^lVN7Zi;9hhs?Pz@?5ttWw$-p+={>Zklj~Wf5M^t-B0k?nS*?|KY3X|mU~s%zid5| zt#!Pd=Na&4;r+*}+tWK0cK(M4{0e?9%Gi>0Q7TG=@k#(xlDmT=P|t`mc2j}7F52Lu z=%GAoXI_)^t#$06L+FQ|0mTnDWV>mPn&yCP6{~b-Ygx>x@ky8735rGq^%Lsm)DI^O zb1bnjD2nZQE{enmQ&MO!l;xUkGa=tRhWj8lLnk@^m#PZ)SZ z_fFQUz9)0X{J{;#_v5K@V_}q`+=3w;1HDYFY=B=r%?(gQiTby=W}^D8b0e^~3?ARp zN@0{I8r*+Km%HDdZ)lMaK>x<-i`O>7Hm4iOtL&V2r{}VFVYw#-D||)w*R~AheIO=V zMaiik9MLNZW(&DCU}U93Cj11w&y7cO!3#I;BCoa4i@ino)n!1EJy&@^#fr{{8URD1 zje?|TtZrxWrsiV9F3r2&&iDHB^B=+$d$Ylw(i0U|?q#vHXf~D|z@fp}DHeh!OU@ky zTM(S!9GykrIeh3+w7RNiYwO71{^<~p2y3K{>CSb%wgPY1r@&U@u;$g+mT_HfQ<_#- zLDt-|Z&BRy%b(Los@N}F?Hc$4bRgw6mLx3_A``x{zd=> z^fq#=2HTK#gV2CK7nE5?fm>g@sgd2y4h;QBQR!fzF3 zzY>*_^sPE|dj#pPScnF~iPtJ^{)mpaVZuFCebS!~Re|7 z|L>#c*t;`0LgQ9XZ3=zwW2S;Se}_DbJxsM(+>^r6YO1+7||(oX3eMp@MVd&kf=z7W1wrbPupF8`ffwJpsP5>%Hrn zI&n?Ywyr-9Wz)qIhmMZzm;UBS(+g8@Tz)xM4Gx2Eot>vPQ@~CPxpDQ!V{fY`&q{Z- z`xYc_tNWdpplEhR$3K6*>>9YhB0S>= zS#ldojeSO6i15aQqFmeon<_1giQ6wn%CChN1nw)!JC&mdty!c-Hs}XR7h{hT#*BUJ zpM=IX&+#Ihhj~RF!}5k2xStn(4UgK#18j06O^O9{kI`uUVtz4LC@!(#jeCzJi4-{y zTl{Jcso-@^<^v4C+}2QazL6gR2EL6BV_LfVF-R7cqQ-st=WsEcXiB4rXVE@7$Q28rA3i1%DUK(rTD%zF0Lu7;IzA$cenu#;N7 zB>Rjp*(n1mx0xZda&>7;R}sd*Sh|?MA>de>%ub6};mu>9*nf3)D_dVFUE|BzN5-w+ zBiuW+wJQ|mp@fO^dtcLW?7p{45{PElS~-jV1GM{ds`$gKRi@cLx*48Z zHB?u|?4M_MwyDp(j?M%1Z^h|5=2(`%Idr03h@`CHs2Ps}d6Ovwx2zew+OMIxmqFxd zIEj(!IP8Jq>stH8l8O?k-6>d@1mHN;5&2ZWwym)YD|-IVlouRHc&y9u%uFXN$BGW1}gw`6~( zf72{7repMnl%tMn-e6I>o)m8ti}OFE_qq}w;v}xfz5+gRZ(p6onBARffuuie_y{fI z=#8zQsqor>k2-0TQ=fi)rYAXl;hx`foZXPBLi;9`B9k)7k?Y(L6~ z?Lw-QDxOiJ`hr#?NEa`b0#o;|%n}}&vHdm*FRs+Tb(Pkrz9h@=vxqxNSbVP_W;BeX6w0ou(mm=N}Fk1SNeFTB-Jq;&I^!_Q1gtuw3c6vrf2gO~)(YX)d94A)@kh{ayV_y8km;QO54kyM1mzZqean z$Z>=)ibXW?dnyv3o81gAbDd769v2rI%^M)i<4Di@El?p%cLD2kltdlonP z@N!s3uP{ohg$`;7yc~<3d0e8gj4FJsSqgtt1Npk#bQ+?e!Yja_J>fif^oD%WZk_ezQPdZ(chnOCb)-aQtVF$OIfj7>#ua!d&dXz6|K?FU`1FSB}f-!^FEVyIWF&CSV^*9MB0a>gg!@4f<@l)ke_sAw( zroa47Dv^^vJPzb$2CI7QC;09Rkut~;&3BmEGx;;t?X7Z(zNh0HsqaAR2e6f#W;VaA zqKRVac6c*i$*}0oqLeOWQ-fuC6|M|wA2N?X(`IJ3OR?jxu?rdlmppd?^m{w_in#fp z2wA6Zl_zP|i*ZZZC|X4wWaxo7g!H6^{lQjc>UW<~QtVuSfu6JAFS{K}4dId+^b4uX z@*$>gHmdyq1EWwi+O|`1xnR{82Z#598?Dt_Czip{2UGVYF@uq}q)~Lrk+%|)U256S zGfsF;{rLwawoWGYFwS0O`1P(v&e4|lJG@UNf1j0dbEdRYEiq7vRA?*bK!#XPs+?i# zsY&%-`bv+X()>jfiBIo*iPc(hhAD`ucd~5UoU4~b-ar?H2dZV?i6)M)-K$aRdd&Ip ziSbHDs!wfUEd+9gxkQAtOf#3$04HQ9uzd-Q*>brv<;gS>>ay9szj?~x$H@1mw%H>b z$;(=ma?8^jeA5TE997!O7zQzkBv zQgZjbiIySV&2yhC@|+Q1r1V~d3z*p0yScI1Fo0;ym(Ybx9|GWMJ5{oDB(8CDm4YEA z+YP^F4~qdGHeM!TFuU{w@RvUHmC zwUP3Lyf#q2SURWha{X3d5Oaq?$Cn_;(66$fJCwap&p(Cj3K5M)&j%EI*_h!AK<1oR z%WdWvu!!jtY$#3j{HW_#HApg@(B~OCqjkK6`W_wQb=)L=o@;ImAdxgzUm@?{W|qN2 z{?jmVv*1rEy=eF|%JxjY<4vq}Pt8FCM|nsw_}Fdq;{bFV>o!CblWaC6DDm8)Kp#ly z073sNWmKmn(`OLq8|A?Qt&LQ(J8^oUfy!wSZg5ZGnnlv}BRMJUhA&{LjO}&_s%IS& z+7+QhypZhUIoh#F0dIJ4qNU+j{&6Q|umP4E)q1g{jj*ln6|v`Nx`9^>{^q2oI2tdu zHu*xRsY?&wXVVcDP2clnSl{Qi5R1)BwHgP=mr>y>T8xOl!#7a9xE<8KO51 zBKW;;G?Su$BS9^)PbHmyxqYL;Fx5KDg4nsB!atAo!3!4L7f)zn^IWefwwVsi8w@8I>r%?&RTp+zoTFUkq9_Y%UD!wae4adE zC#v{FX$y;LPb8R1squmk) z@>4 zJr5~>@zgPlFLv(1D0i4*8Kcqhm0##-i*&^Xi}Ypn3Op{>VwWB?KZ~c0GzxOO>o`K$ z*Tl)h{l+hm4|eC6Pygzf(BAI0kRkZCE9A|K*m*^vvfVNSS4C#-zFKvPx+T#jHJFL9 zbb>`dhK4eusBCdkxH84ATiWQ>f0Tkf4tbnk=v+*1{EB9RiTw8?agS0BN?>KfO0$nw z8ald(C2{oA*jTKp>N#R~jkxxH$IzuzvzUu3yB@}B)RdNnJZk%cE9(X$tvWx8DzCdN z)9lBK$@+Bl9I37IEzU@GHdP7jVN#6tlAZL1(mFY=5X+%5$J~sd1>MJaU%WdXYR0UJ zgmDL!NG=4Mw&+ZCSa7HhrzOAU{+rU zn*|?YhANplsnq;%B)9^Ulk*mR(M7YUW#yu4;#3$?LRhlB@6|KK@X$!0QBh3DnB?U zezOt<;QwwZ;~S4J9P)C8ur4b|y&_K+gqfU|#S5@3u&3>%8m`It@yKnDPYo(?>MoZa z^|OS!7wy#SYm~mB7&}8lWThW^{x~Myx5bG!^aIqoy#4n`*Fc%q*<^sC0mhf=B_K^8NO{9=g2%-E&7lHZfD?UMf4`H)B5TF1grA(*)QDugA~CLDN{&1OiksBuNIL`B z;jB$GcmW^XPxd6NLm-$1iH5?INv`_&_03NT#K#r61g&kM0QlpiJOB1rSr?vxx78Xk zhr0pBy`lAJE;7Hb={BO=BR$E_DL5@#xVm6jo6Qa+m;v%_F*z0lVd(#ylqL=%{cbh^ zkP-cLo!$%9lU|j|`*f~h2*hm|&lG+iL1_NDDX^{7^;76>%)|mE^NbOHEUK_+;1%&R z3rx4@k*uWAnUZ^cyMFRaZH?H8URrgsQJxE>tHM?Rdym~G-?cIB(h19_lXjNPbnb)g z*WON#X)d8e$*tG_0MIucvksE0EAB~dhRc*)n-u(4DnSi4>TGQhs35IjVVqX3lcn~O z&Lq(mnQ~P34q?9%$|vI#*%3VUZvG!1IlXUav%RKh<=3uZxV5r0p_?eLyANpJ1j;S_ zM!GpL?&a43lE9S*^8JP8>5}DICU3~TrF|kHOq9pKjN3kiQE1nck%+kBq_K&at6qqLueU}+GB^Jtfp;8t;w}_T@S@uHj?IeXJ5jj@{H>eQY zj>Ij=m)^-nXT)h^B*T$mktU->lZ1{MB(|bGleJT`vqd{o>EzAPS1nhvsQ;ykyq15u z>pSHvv+N(9spDezwi(6n+Kgc#THlTrnlfFHpoCy#e2v+#y>rmfEdrWEkMUt@gagkmk>kbEQDUkj$;jY zg2`Q5o~eiQTXe2g$AF?HX)&A7ikQfp;_PHCdB!!#fMT!b?45zFaMbjfB#Q~v>JXeJ z#a-O+#Ln+6eH@XwTprAt@abH(Y*&QWi{47)qgFZX4*#?=2;N7gR*$Hw6EZ4@ zD><8t+6)%q2x~DmO+)- zi9%e{vf7}r8wEZeDte5#*&1Q&ugdCAhk(JdTgWeu<)F_O9zVj+)TehW?StM)6#;8Z zdKVZXkz*#+_nMfNPg=z2R1`0a;%Xl}Iom5&PBaI^UQ(-S>|H-Zseqy{1eQEb%%z)K zyf+*DyJ?;AUqD%z!K}KlPC0(=+HGI* zu)L}ExM`NhI~MginZop4D$QMG0mZYR4S$5Lb^?3v1>VrH3PJ_-K5hG%%!&#Mw`_A>3wa82HcJcq;QnmkYCC>kK;d&<{{1YXg0rB^0 z{sjFrC#cf#=mKRJ0CZDjz%u+&FuGE?xVuXdIrpF*pCm|n1LJ+n``^-zK#%nQP+tPW z{wHGojL?3P3kFcm1f#w-4VLKu2#lzla_lG{<6u;ka*7IU48VgC zkACF|Jgr@E0O4BG{pznx*1{L^$A$8R7>Ue({!S1XZjYuFfIXj6@@Es-;F@RrtJWO{DD%XIaIoV^f_hCuSpV z6}+b;;QEqHP??RUpc)(&7Bk0dDd6+f>aahn-U}$+yJMe5bqM_>HqY+j z6HoQUu&4YAZQ@SaxpN)}k*M^uc#Qv%lbsQ~@48T-Zqb-&yrn<&ve6b1z5eC_BCa^C zxqbV&1H9bbbE2)TI9c1rv{d*_095*HpNC7S=UP{XUPU+wDX}FYylT(-T4+LlGS2em z1DW^$&`TzlV$u6x@N$p z@YY;QiUFUi?0&sT#8PGc@MCVb?L_K|D*O`kJoy{0WLGLyr2J#ww<|1==srlk1%sE( z&xM&luhMyeJ_xlR={exYW-5j|RgSx{reMs>`2x4r=EZR98wCP+{m|F9a8s(J#;PQ4 zf^S?*f2(UTeQTC#DKj6Px=4|K;f0CZG_MKK5a_2t1|1mx>RpQ|`SwMgIm>Q~MS44A z{@$9vgy`GtY~ko~?V^oKbNSM7fTo0Mg8bk$Rha(U#7zp<+j*Tv`)|6)y=}u_GOQfj z=M8;9%`ADw`*G$`E@EQo3N(X)#V)!-QT|2NW44nYuyjm&((UbaOza@^#~3eFxw=cA zAw-_4r(PL7d};oyc$UvTcDWeDJJy_YO%Z&H978s@TdG?~ngcO0RHulnH*od!Dl~&a z&i6Li)?(@Tg`@n+sG4)vc=mA+@rPl!!4W!R6eP=%B+P-w4KlWf)KA}tzRond&@=gO zWX<5Al+sKKVuoT z?rM4CDFRi1yUZK9H${aV$hdqIXbJA1l_BxG+_u&7WCD7K`nkyeB#>>cIkjG{X8w6o zfvvs?ssvD8BgJ#{Mz`~n^*+9-*J)yOp>|1OS^aeKa(9)F#S!(Fu$<38*Seveg)`hI zdwDzlsl>6IXW&y7;C#&P@*hC6*|v&9;ENA>F>c7Q_&^q*H-iSnYWE+&o?I2B430Ig zJ$*vTw~|fjb;Wk+%@)V~tc(SuQA>X zmr$B;u0BH9>!Bg4i1#rK36(Ix3;wc?<)ECh3{}e7Q-;-Q@r<9T34`q{E)+Xczf$8} zc^bN&a5d=FtphfRpCMVfC!~x_2pv-khGyfBq$Z z2=dO7rKqU`r7XU?8paZZnzM!PB+7 zQ#Gvp0amae&v~!8jdY|ZgQcAOywp_uKmzHV)Jn?$Z+?Z(kSVG~D2SYjbnE|()bQwvW~+c+;4TD}xh}htvA3Zl@jKWVdj zSc~*!m5Ubq^Z;)4y@*el=*OJ>@#WD~!610@${5}VYAqqNgIx77j&lV*wv;o<{rE{5 zp6)7BVt#w1CK2R)$%EST3T-tRjJAasNGL4zAMBgVu97tlKc?_d;SPAPlxJ!@^+Bw* z28B?ng!VcZl%$!L$)^3U9Rr>X`z?rWYm66G^jG5k03GlkT4rI7q$NXrrR<@0hXW&z zLM_!7Z1a()mN+iR+&u!eTQ7JIpuF=cKfKRS_N0`0yD_m+D7(np)EZv?w0O^;ZI~T+ z{y431cnh!9r|P6F9}al7kKx{PxMu$8Lq~kGQoy2AV*JM@V>lTfG|ei~pG=I&ct?G2Tm69~ffU!E3~Q`6BhzDJ2R- zH$$ni`{vX4fkTt}x%xj{b@igcIFdZ=&G48Bl)R%ZVt<{=!!$3_j`OssHOmY{h>l=1 zN;7%#zMNn__IXnz(9JxZ@nVP>l8LrVAK2^hl7bZUClCuUy;~?u;^1Xk0rn4v!Ap?c zwov*E43vaLQM%K!&m_xWUXFiRMPyBX^^{p)Zsl)v0T9&9i>p3DE`vUwThUMG*8Ugo zwgDogR8U6b?~vR0+&SITdQ@V9eoza`j9+O!4oPRVWhn8hG7%Ul`?y;=GKG>^&5w@B zYp1y5wf-rge06;SjDh@0x!goAE9}e*3^{Pm@lqHPoOM%4G#ee$o}xqqW=H&C-%+FZu_}VDBa4A3#!XHmLICr-zQ434SUyKh9y7_gza|@lQyUWy!ttbkTsHKwJojfxew3LI)>NvHujfq2`!kV?y z+*R~6=wX*PrIvk}sPbE2Eb0C#wI7O|vwcdZ$6Do;utu|(({4HH8466*ts#-x-$CwM zCFGzE1S{oIOs3_g{`fEVLSM&pUT;(43Xt$}*+2|*HSO$4AyX+{HI-CxtQ{h(R@$-w z6>PK@C$_8MZp9Nyw!f4xC3~E&i_FU9V}w$E5S;bz6}B9uB?QZ6X=6$l_xjD<2^l&P z;k}N|{am6E{EHK%k~z8g*gX(s#;T<`nrv6v6dk%1EOS+wRQI}Gl-qM@Iny!<@3Q(K zhNzALh8vEZs!Aay=!cW5?ol1^6; z!h`h(n)rZ3u=xuM;tz(|CKZ%B!a zwwDak(9*%uhFs8@s;hts%BAs1F7m*9Rd|a-SkIF--p@;M*r?)DrJopF34Gl2j@_VyZP4-CjfySqS46HH+9oEy zx2`Jvjre#geKX{9;&a(npBuXIg}`bvoPP*@e`l#t*G%XC5<3)7a>vS-Qu(_70-;3*?7PH&1K&5HuuUT~u(_1};6)Zh?-_s1*tdvrv zszoebqjZZ?inUq#fy!~k3f`Abwg__5p06ze_ExM#ndy%ml$r`eA5h#g9mS=mW(*Q~xL>&9y$iJ6d#m}z3sw+Ol=VCTD=nD@uo%%s8 zLCh$gf&fHf@PPyb_u^#RTCz3#%>o?*%7J0r5qNJXYpl14=!CZP6LhtMMV3BcciES6 z2;tc?(zTr|!i=uRh0!(_Qu#?vej8k*dbd}f@~)E8Eli78Z2eHiN~IL8(9v0Eb7E?G z%+=9~-r<|+RI>pUO50PNO@<{Frjw`fb)ZgS7^TP-h2XVq6a_$3_5Jur56@2Pxk^=OmQ94!9B_DTQh@Rs!O5JoUbmkfX;}_w zIs4Yqt^F8@#LPm14>E?EjI2mO$Sy3V;R>$lkr69 ziOzd*_MoAnQa{n5loc5N#TFYZ{^qS9R~c#)9UVFV=(SCH7&@)-b~Nv}Oi7-|Le6xM zkvsntSFmT^^!M)*;SKt)vZYv5Fb;)1{{d=XPP`6(N&JLh_~52HXpVaDQLNCxNQd>FnLub31D&@Mc_sYcus1ZpvNevAs}0Y&IJ6YPWL zB@unP|HPBRbl$+lGb@LQ&4TIH+LU`ws{b;JKkVkEBJT#kGFZZ&1rb3=2nj&WH%55M z1Kufkb}7)BNu)zg>vJ3Gs3!v`S;7w!)67gb%|iHz$^sU3_ToDs z(|L+vy7Jf}1wXhIAHjXUgSCIsiTC*)3lkUP1GM4+B%3BYAj>mBtp< z1CjqK{93t>_wakDY#`Z@o3u3d90-dqXhZ|z*lqSryOdcsNv>7MsRf?(Oixx|?`h3) z)K6XT{Y*AJAIz>5OYQR${mj3zx2)UR!ea-3^B{+CfYS&-7(p6-;=5-7B6iu1C)sMI?qc^7phB06oIR6=VIMObd&1`X(`EF>_8rWcoeCX*Mo35&_Nv3;o zC|+T2pWvdO7lQO~o&EbM`W4ANFsNSe`He!9;rcIWzpfq}0z^+0WAeH}L1UWtL_soZ zV-up&@FZ0@>h^YsB|)I_3LFH?QE2rNv}2n5btnxSipe9qMrhl-=OtgdvC3^pjkBNA zfv4!eLp{AL;PoG=es3T+gO8m^y2Uq_h&fr?)sOO~z~B7*W0_6zz$Tf2xwN8=MfYI< zsw2+2Yz36fDV7g0veif!21A+w*Pq*8Z55$-^L*7;)*X?HrEQT*WW7xicqjNv9v{%Pt+Gb zh%@)Vie&(0T*IP;O!@!b{{M8s7j6ohQ?4bFI}UHop)N9EzBm=X3jtFwgXtu zFLLHtmCi52$x`CUMA3Mc1@fLf&TwduX@2jSQs%mx!5WN&?XqfVD|FO#Kpt$Ae>K{2 z(- zAlMG1!WI)#qdj*RD(0Y%K2WWv{|RJI(C||Z6PHml{_QJ-@410KHL-iy@wiy;fAl)e zCIo@R2SM*a)1WyHr<0`LgM(~(Z#SRZ+FYU8-j7+f3)s7;No%MZ(VquM!?h544S@P9 zd4vaUQ#^N}T9Xw`P%L$mZlq3xD)I%;c@aJ)!o6hc!l}oA%&IJQh+~`sed~8!xx!8` z=e3W97(1NjcGh)#cCc%n=b0h(?b4fCS5YS$Kr7trW$AUD{+0=8M2=eC*O6 z_X9HWPHX|4_dhDVTB|@AVji=w53%BI1|L8lmwllR=Q=&pe`5o<-o;9MxvTYDUKA@P zezcxSWj3BF=2^tkZ=z>y5(~Xh`F8#H{lUi`tzfxV3HzU@3y}W2b{Ay0s(k3v)J`kT z%GNK~g+vEoodM}Q=ijjy?pGozgdEJ2Ydx-sr)%*-AFcDtpQnu!i`StSV;&R(*>Fvj zH?R*4U9q4>fuuNz&s^Dn>o;%LxqaR9u>};S+)o6@D6;`EE6Gh^Iqnob`KV{d-SI~= zf%Qo06zU>gUz$}Cs_DTqfM?%X_F*N=i3iCt>l|OzHxxnxInBGlA{8{9T92wI^^qDA zQ@qtg_(FLUE zL_s|+OA80FP9RLr3kFJkM%ChdmN4xzHkh1i-v@&Hths#gI&yNt9obT=Shuh=!(_1N z;a4q06s|r&WnIauKWSgha)q}VJj{-iu}46$MBj>a*3$O!j*KbVYkZ6`jST2;cV&i% zZz$q@RjWuIp;C(U2iFt3+h1Mu4f|-I9P{QKHB;r(t_QC&Es;ZZ1)O>w=N4kFAIu1< zg0urZ=ow3=_YiL+Yjw#buGAx?+n@APsO;r{_U$3Kfd(;<-f@Jk!QuGq`ivIMy`+Fz z&drI1h}uJtRXPaQ*lp!BwicK@aCd$f$l1}>Fk?Bhm6;HmX@0r-qAElJi~|YnkyJLY zXw>Y@)RnsXibs0r)Hk3ie^Dg1F2ZqwiRU_-S;Lh6TnisD$p0#dkB%b+=UarjFCa-0 zJ0fG=Jd!q$Q8@lcZ+Bbcnl5fVcl=&#d)@$BuvGfgh;&J3V+(OXuQ z^ETWK8QU|QCdzQDN;C))%Cge)H)$YQi`_n_!`oW#L;E+9)cF$L&EwOLl^)2N3fUfV zU{x>CvbrS%144-Pnpwq>M7}`k+g>WlO-YJ$MuG%^gl8-U3>}3^AK#&QnN_U3v9UaD z4?RF6s~C~_^1gI+HD_gtx0a`6h;MLpb+J{O?kCUxLux#%zD|HMqA7m6*-JK6#?#yx zWnDa%1~=jf`#aE4tG$bx){heXLecWx;Wepf!|L`|hwT>TVQk{ye8?zXjH2QlM`U^z zS|w@kA*s5gYp~^x)gLpkiePDTRF@4b=9Y9k7m@eLxOa^Hdu6yd8n9omRD!!cR}HM| zt`7V5FhIgUvUd$s?H|vRuYu^yIyzNtJJp?7C+sEs%t^df{aYv-z0LQ)2gI^pl?N;Ws5)0=N=KFoFberUF(OVrq= zKT$`qL?n?>+D{g(6pW4=7=XfN3BG&<2_{ft2)u1TPKq_0ZU0d54`8GFCW);6axVm| zuG-ldZXJfO0}({nsg*SF6-1?y7!i741@%zUe0~g7vUHjM8l{VTJTiarszr;b2UIa% zsIfVjMamHcXW7Vh5|9s7IQareRnuh@JM9U%ehUE!b;z6?s2iV_LpIK$JSg57+40W@ znPX!S>zO!q&(6k8QOX_rBdeoc(-I53Vn$fK2{JJD_QL$Blj^%e(UA+ zgLnmlalw-mGydG9z($N99c~Y)bl8s{!6+Mg0s&+18+%hQ8Ik+M=ASF7j`SN{(}_N! z;y8WeNOU=tMN~i`I$A0o(iB|?q0^Py*&`tfo@DZc)?-yPP}D-#0Z+6yY}$^Z3#zhX zq-pllGP3P9o8Cp7_i11{<{HK;_d(3=b0qeI5LLIREf&5LexE&B_#306=BpfjL3r?( z!o*L#=_m#BCbsyo=9YuD@38r*EeSmCex%D=&X-G>U~#;>K{vU$;*R`IInGNl3Cly* zPg~bx3MBc_8Rls!nHIpXNy(s_i?LU1zfM$9%)qu$6IJ6lrblH5D#ZT@lT9c)!^ZQ> z0JGQe^8FeVMeb1xh}lsleo%<868ZxSqO~9S(Qyi@HPF2_!c$FB&_rXx7-9h4AX*BI z))qd+p=Z)97d)D+BxY#P&nl%JQV1`mrlu21N^1iB*)O<$Z0^wO%3#W1W=`=+d;Bxi zYfF`643|4k`$~V6P#L6NuOIZ|ftn$b0{*5o1M&?Qlz#fq&ZGEp;V=WSU7Nvy*Nl-9uW5!V-PC@^vGli<~?$Z^|#Uu9S{AFCLrAXs~U8lqZ<54cS z{sHiQj{yP${Z%d+{sACx6R(Oxaq6Je<=@y}aB*70uIQoL$r4m%!DtMkk6}}tq-^9* zY1H0Xo2%FZucYV>m1oNn@e>r}4JK$KTyR_+qRx4427V=7K|NmwO*-ZZ_MvD*6pe zj`}t4%)Rq^qt@p8y=wgv%SV#wmATg+@3sz>I@_>R7ANDVzW6Au<{-|-HzENzdcxsW zXzVLd4s&v1TQxfiiQOUde<`Hx(@9VSml(7u<=Ky~t!GJD+RB*dJl&%X-`9zu4Z6!_ zubg5BjDQ+}3+j%r!jqS;M>$PKDvGtT6<_n4YC{DbW?v1Evd?M_6#C!T)um+n<&eY7 zgE%9|!NRz@%n-9uo~F)O(|Yx~QNl~L1e|lG7p*&PJ{j?yWdlhPuoO3M$THT9CJhwt z;??cer;D+d0*aiPMZ-blZ*(HVn9WqHAgHL$T3s1s(RJZOU!I9UDemS6JRu=I*kCI~ zVi|q;@DgJ1@ntU75=52h{I}N^X(st(EyvVSyGsp8n74lS0#$hnc_|S~;3H5iCTk zP-${w-yfqxzQiwmlK!3bXZgHU778C$M-zT>8_HiWphpZLdJNhIkj$lCu62P?Zc(Nr z76dI|8jl2C8YN+aL1jE*=~GBTy2;<%kbpJS%RK^)q@0Q6udH%vP{A0n-gt00F;7%< z9R};0Rs=5)6AQvhuk+s^d_!4~h(i9@-6QQe7)3+R`;R)tpoiA=1VK?m&N7VGZ{!U3 zfXbol;C1j^yU|X3oFp19;r}Di=A1 z_3cVgPG0di9CM3$Z>zpdEAuEh(05(=*%zEZvwCF>@dX?LQ7Qv!1Ja2V3gc?jew!U4 zj{nuJ5`Zia+mI`+T6$6r?nKPgb~dM62Qm+~G~#4|iF7pBNBu@iYaQuC)>2_8+(ubS zmRQ!D()WFPK{iQa@upy?nw#Iuw#x$v8gn zYcsRQd%ka8xZy91#<`fx?Kfp;+d*IVblP6F@vrojSA9*fUwpYMGB{T_hI^LbEX%rs zt-g*v%CYKvFI4wb+82thhxQ;hAM~!3c()|KJjeQy{=5s8HWLu0lzv`Me&yU*&C19| zfN_7nPo7+B=+sJTB0Q-i+~vATnP7kQGq*leRGzPVhkh)Yt=>LB9mxTNaZ2y_WrV5! zlc@}q{=Jy{jpCDzvYMy0_@+X^ZD}m@lhB_rGkTByxevA9b|=MP0eF(``R{QIaTDQ3 z-WAw#;yyKXH18eP9R~-is0hNclT&c#E-wJ7dM`>nRKG5e?Udo*3Rwy>?sE_j>gbc58i{Kj8P3ERN@3<9B zduVsmy(fJ8>9RAx-bNvleAaA;g-W{i8?h)-YX1O;F7QKJ z-C`}ye=jGspojhoA901H1Xu(s+6-T;WrL1FbRl}wCrsi-u7R7oqZQ<1Z;uu`=_k677NRHoq0M#V*!Z1@%+;u)`{OYJfBStiSNX}cqd>oh^06KoS zIlRNpx|@VHv1827EVCu|^BSa7?C!MWebn37Wa~y*AtKv>ypjI$Ku3TbN7@iCTK@#? zIM3dc{=Vs;cU@t;hQ}CPs1PN+7H+|PeKrF+Fl;C(VYjeXE=aBuHE)TJ8^J=Bo8H4) zJeaFd#t_J&BfDG;bZk&oI_!o;}t>9py3~rN$_{3esxz-k=>+#qHz9GdU`Als6A1XjN z#ZwN>fzj~}Yesp&B58WoP78|DU@y6;FG5~?qr+RwP-CAqzNfLlg7!VhrqV+4b?olI z&Q9l@ziD32T>FZWthD~A?>+e&{pvkmwj1XAg6?nLrwnNBBxX*T1z)*{>E^17WA2iK z?RRQaUESszqb_^J3>fKlK~o*>-fw<73uET#w?);kiaXSMXH%NT54uduc_gKfksB8i zH~<^xaaA1X`hd!mLhm*bLk6jDsplCXtuFw$W$ndnI(B-w5=B=GwIcBA=h$kL$KJbB zohEvh3FJka|Loe-PXtw&y8&4^Je6mx)`%Dnn)~OAw2|M!hD*i}UN1_$KfXy;BPx>(r4Ux}3TiA;kWj1$b7?$Nc+lKTY^0T@+mK+I4`I zyNsKKS5Y(mAi=o@NUCHaje=lR^zho`UGv=+Bb>4t{{T_tofR?NPflj~(xvSljoZdS`TWG3?Zr23cd#Xpdnvkep7G55nz%Gr( z0DV5{>6ufD&pe&~&ZLlwR_1-B2q-M*80~fb^%H41$=*jhMu+DcsjDy4`3}b|fd1im zYbU$W)lVD0xMGZpb0?NQ8B&ZG@I@% zH<2L3^9UnQX8)d2R8Rx)*hK9d*hOMJ9QB08$ci;I0Lg!j+hsr{Ph61>d5pjBMmGet ziZipbAei$DV!X#d#5|a~@qbABR~IHE*FrkyCRGpE7bft~u9N(idb3Wh-Mrrjwwf=> zI20VyMzljA$};%%2|qP580Axp6cq&(u8{&T;X~$n>I#@^V4h(6k5+ldOki%@xQ!Y8 zhT74#dV5=|ENY4rq4$IGWk3gWVTgHS6Bi+dQ@SnteHoL=GJ%P(nP_+eEimuuxCrPR2cdxt(PC zAdB*Q39ip38m)~3ER&$!;=!z|y?0CS`anilM>835k7$M1$`^ZimUWeUxTS$3L;BK& zmN|J&S8JWqC@&+CaSUZO>*gO$ScGIiVw?TC+j8laDT)%f)mulw-c<2YU-2!^#(_;D z=MUq|kT$d?$H#16MaKCx01t>)BIBv4t|n z;fe1Hqsgtc)#Qv^a>*f~s$Rv6Yr=R44iS;3JzslBXlq7jy~-Ui&UU~6ZAbvNm5XsqGgoQ8uxrZhG+Bd%13?!7i?r*0al5ZHx`1N8=D#<@N z*yyXfG#9OlBk4r{uI~a_k$vz&h%a{nK&3j6E-8i>FQM3*)9un?N2YQnu7% z+rl8j2vJ+)3H|IDTYg(>N79?YLG{v^Bsrij&TuQ`d-kNex!gGMdL!nkR)@~VAd_?D zYq%ivb|`DjDw4dHen({nDejdKMkqNt4yiHXvqC3 zRngD=|7{GrP9$ANx4tQ1*CTr=dC_M9eh-d2qOx&A5Xhz=F|=@ z53>pjhewK($P*2vIs(;EhJT0kITq_P2{!PgX`bKEZ}A><{hpkv{{LtWywlxqRBeV(90bu*#G!?bBkABYM2aKylN@dl7$LuQTPFY1=iF+WPp)uE~=_{dZxuUujg;<}TU=NY-m|p$> zH{+3F!WR9BbJ6;imgJe6AQZS(BEP|Xy#L@MM#;da_!SY??0h>>8)^R~gpg2b|OvATEl{$~=aXUQ(p!h~)FPyEk8tPaXFpcm9ycFOaWe zW_c38kY;aeZ#t9@U-ok^1qM4(#lvyz_CvLK5;KKAj;6v$2Ijs6LvJynOzRrjO(*+M zZBhhHe{DAk0x6Y0?ak$wCkXLtH$)yEYZ=^qRd^Q^{-hDJgEv!MmA)dj|7>?RlPse$ zb6U<$2OZwnNcDMx&9t(BthS~f-$Dy~UeMH_!Fh{faGl!2A~lc|$ObV4VJ ztlrQX1l$vSd9$Ih25@?9lRfdL*c%FAoBK{f^0L_rfbGt5n}Is2&*Mk~ z3q3sE+;sN|GSfsIYZ}7yabd{8L65Vval_EU`YMhVEYKfE#5Sr<8x)ss z#q{8uTRL*znAvV8>1&28dZMHO_WbgxHi?t4k7(3LGwY-$O&{>V23MLbh?*IzUBl_e zy|Wxe$LcmGVH}2czvtEW_X$SOA@mt~LOiCde84ldF@0miKYmG9yvCR&8Uk-xY7dnq9uVx~-}sovEu3ml zCXYp>Zr8~q;A>GMgOdRlW-{ge9V&D(Rh`B(rdOa(Vx+4iyUXVn4*4_H4%^Or=Va)( zq`>lKi|!sV)Mi1eAeCuK?Nl@*)2VxAwTF}Z<Kt>cICRs zi-I3{@pKZaXfjGi5^sD(GjbV=eD;omgbnTorQ;^E+k~bhOrp_ixz~L|+NwJI$YD#D zP2bPquqC~^!wM_Tz+DBeF|R4dZcoL{V0#L)B@G;uG&KASq9=SRL0JqpLo*jwF4Ny&*%KIHgdyzVtj>cTFP{ zuVROq4rRclo3qn`Ns3TR3uGf1noJM;SS15-qvlqh-A{a?C}D#JUNemv2L zNvbdQ?A2IX-pA$Uli253MALy_;lBzjsRg5NeJ_VEnnn?e+aA{pbGc_B2wET}qMBXo zN~mI>fU6{~@0#>KP+{zodRA?AD3f7WrQSX7g2Llvv_*r-=gTYj&c1rrWfhl+7@1YT zF$z2CO=WY+xhR_)amMKW0j4=+;HdEh!AkEdhA4H(FT$$WZON@eEdvbtqf3wQc%gPX?o&?q~GfvBBB2P zf2rN8KB?}6#i{VWPZh9ra_b`;=XbblMV(o95E{6tsJ_=V$wDxYn3J9uCmQAupH3^C z+QjghJuE2KN+916j4U!-h_-T6G_L4*OZrZua~9rq#Glv`pDdYkO6@jq7YrW|Yxsld zy4&6myXq5UfOkwsFnqT^jP>SZwbxlsx5s;`w#2BtMU-pdrew6Xq|eV^yr*lV^`)LU z!Xr?xL#0lP^&eocMEqz&Jh3Wg7}4y$6u!vo0a|rNT|x>s{sGkUPGj!pTh7=b)&Bzq zrQ*?9gd!aWp(5@-!ZY?iw8n?y`TLP+I7|Ztq3^mNs2PDFJZ0CFuid#W+0UhUWO0qY zU-nxpHcii;=X;S6bber!P%IIoXhHmcstJZtYK=NuyH0FkVWsec1+;e?XvUX~I8_g0 zocv#{8od{-n?hy82WTx2gawc`*3%?!m`)wbh_xl_sQL2}Ug&T+Va;uA%uI_$tfv80 zelPNjRV!xrLf0x)Dsmg}R|oRpe<-Ak$TO2f=J0~zLT4)W<>qt1KH#U^ZV+L+c$x8$ zcHM%Mn-Bihh^|f|9`;KN>S+MW(uhk+$)8e3|8bAts;H72e#ZSSl*+15xlI;CK_=E^ z*|7b>9+Y2fg0Om#Vlv?T@}04ED})Q4_vaLhOw(mXUKrxhi04ri`b_oDrEAOlv2$wPw zcFyaK5Y{~Om)&ciid>`Yz2ySJEHAtAsN_32b@o|8SB& zXvA0Cb8fajF6yvXTc?|RFd+~qb=shcxS`S*thJHf|c85+W1@j&n;zyoWo+>cr` z9-`p#$_P7$Uy*&Y2b7Zy`QG5W&!LARRIDVo@X;1#8JCCoytt84&<7H&Cjq#M407h& z?|zp;C*Qv;#G`!~b>vB|_8lxNbTG%$V|jC7C9=MBVXFv_B39htq*L@`*~Mnli?#L~ zZ4DLNC@{_NSRntxEoWw*B0s6FCH{2R@KetE2U+R_8S0oD{m!^cyvC9vv-^CkEwIGCq)EFlHv}|$-$5yvB_JQij{!i3R0Ge6J&!=K(n+?Fa$C%F<_D0L<4eaZ<>&xm+ zmR~6n;DsZm*FLLD_XqGA2x-ta+ zmX{k)$@J^j*+ljtj(|s+^CwoHF@*enNbhtT7fapmKVYE}Kq0G#3D0D7jJ*GDA*$tz zzNEyfqF#{`Xn8FwOX4gfc9Ysba{5BhxJ<6LornPbqYj<=e2=HJy`T)Lw^w2hRF|bH zR5u+Lgx6v-AuYm1uJlijzOvAN(rnx;Kmi7v4IF7VaA(d9;H%dBwH8Wvk8LFXV&MI_ z8^&{hqJIQ@UtV+i8UfK_;t9X74tC)4Q5vh`YZz4jUyQwFP@Cb~?VA=TQlykpT#A(9 z?heJ>-JKvsgS!-mV8w#FySoH;cXxLy-TA-!owN6xIcLxQo)4LMp4_?ab*=SVti%A5 zV<5QUD?9rVBngKZ7IL|hKycWs{Jh*k28G{hqATz5Oy7j94{rASQ~7_J*J*=XKQDAc zDB8N*avGFZn)r=8)|qHQdk|| zSww}87V1bIMqmH91i*!#^39J()_wNE(s#J+{@-u5|L>mgAp!VVEXB?=`OC`tARd=S z*7daxr_;C{0K{ETnOCFMf4B2HQHR=GyMW~G7*H)i^(rogb&1mA#xuh=%ms<YOj;Ai@XV(w@#Uw>UN8n5`J0byWRwgFGcPz@cKT%$fFL+|%zdIIRPTzE|L3d@e zoc)g^QApLU`>m37b=-yV9BTGgH(qo0)VY+}&V}~(mj9Ppdwz+ki`zn;xI$v9R?>WF z7qbxrS2targV4%0F}@b{MD%n?!^l&ZYWJ&oxo{EXF>*Z*CUu~EHCPz@D;i>S2YPu< z&S+WQ@YzoeY7?;lPJVa!l!%9_3R!x-!@I3yaH3DrM46rJ$`L9T66H|}jWHeZdTRk4rO zD00d&6FN(MsIZHGU%%eS!h=5d9PLRCc43odbX{{?3cWs6qBjuf(I`)W{sG7j-&%RX z{u<+-o}MSRcB*>@dl_AuP%5zCk<%Sl z!Xm{5P=*^4V063bP1fdHMkv45KW612)QLJGo`*m8$#{ngpT59BBc)=wftprS=I)cs zSEX>Tc=*X{sxFiy1URsIR}bUp=oEVu<9TJ@aIC&=M7_V`C)m>H(?b~^-so)!tWWH- zd7(;vkH^wq-O5MoFmW*Ei7Q1VM?TyKO#*o<7=>8wN12BF1as`Nqz67ODEYlkBJQUh zvyOI+UyzFRgb_9fq_BrA8BMXTKAP$}MD-~mjPT>jq+r|Gf2QDno^Gnps;a4q*YiaF zo>;E&3rpO!7Q%B6)ds;SXkYr()O$-vx9g1jBoR3MVBl~}t*gP!ot|VOoAZ|DIA%HQ z8x;3w0(;&Tiy_8L4JD_L)2 znBMW0H~uS4Bx$@(8-@C;8|6RwGcq}LycQ;1AuU}E?VJ_m0^Pd^Y56bzY7?G^eWYU4&V6NO)R+y8>{7s~-&EiTxqA~d&;Nw1HwBRlb z*lnxvJlzcgNwWUO-7i?FdWB&S^H=*Xf*YgL@zzg~DIzk(bz(q#?yI zBZW8YcibxNumMs}!G9ZR1xGM>SLad9*<{9c2VlH8=+6H-z`mY;p?Osz@n9`celbd6 zV#f{5XC+7^US-Q4m-%t(aPjtKupzI5I@Qx2ePDj7E_!+(U-%gL?zLD#3tz3JFx$Fk zSw;tmyvgtZ6&1{M)Eq6(AF9yPc4}J57NY=%u5A`en{X{$?8lj?`{^j)!kNnYtD^h)cNGV=z!HaAQ;#0vDO(bDl%&L-vvMw+ zdC$Zrn+6!`+VT`UfppfaRm2-nW=HSGb?juf)*ldQGPC|R zNWkH-=sD*1-fU%d16VWJcsb9P6}QV+p68Am+Egi$z)fy4T&@Dq5Lf7KCzh)3dr@Tw z`7(qa^vMGv$TPjbDj~Y_apJal1q?@Ms>aj|W9u+J;rs)f)xiE?wg+GZE&Hx}{{a0@ z#1{I(XTgB~hWmMFz##pA&c7i0-TD(l-_RRA-T%N44&*STzc$3JD&YUk5pIRJqW7NY zt5bd2qrz>+s2!?VR4FK#)xUW~gNGaKRvL526tzWm^^@8RU=9><1^pbRQQEUm$$w1Y zi$~AtLj_bI-c%|_vwW^8&K1zWi<^yb>^*KpE_MSik!jv`O)!GU0cvUkD$xmdrkmG1 z^(5@RF0RLpHFilN*M!yF0{d;vazksGTG9zt!XhX`fK5ZyoaN@U(j%tTz8f+82tU@I zn9LKsI%WopBn8of8`&J}?PFzi@T)=@g7>?pp^R-b$6lcs)Al(k%%8dbbLr1N&aIX= z-R3K=fN!6X3Tj^9Ii79$(9UIs{2U1)-whH)+22_WrzLQ5 z*>~l*TKOmB1bP|D8pM^p*s`Y?rhJdvKDe~j)%z$6dWQn;BLSLJBO=B@{!~OVwlkvJiV*cYb%6!h(+Bs;eEB)wWO3Okv$GkX`$vhgdz zGOPB!{e8_8ICmQ0aV}%=+M4s}>Fh6^vNFEn0(xF89>NTPjFHb0F?_s#W4mwy2JnWdEjr}zh-i5F;v4-^))3>I>N!T0h00l*qEECQfM+s&V; zgX&w19)6iS^zbq=*zAowoY_R$^SYIbSH0cms>XE7h_44qxgKf@`ioK3cTCd;Kr{v@FkKq zJClJi3F;NO3PQnb3vI^0<%H*fa(7>s#_{IZ!4(fwNZ_JMd^33R(4_tEaM4s*lhTd5 zZsvTmPU4vI&(C@m6)85IKVfXODOUtxw<%rn{5nOyUS7Aix^x}w09T8{GiN*mfSWh=&o$FbSOJJA07Di4?tU9zEm~v}O}@wMs`^p8dStphBbq`IIAeEN z{iJx4N56FI#!>D*gXI%bt|e3;l0(*Qaf?9|G^w=IZCk zGUmP+UuD7D8S;8SJ}6i}N$%A%sXo~)J9fUp)gu1cx>5!QYDmw&b&Af@w#8b#|W2EmcChVZcfgSX| zpEM03w@&8yKV_kBbZ1^8`#vB0##Yi2z~q;M?G9Ggrg6h84E)Lxc7C`n>q0TFBEb&3 z+(nJBKb`BZzms;_oJ-jFg5e%YC%r94HZFXGi6;0fZE6>HV8rK6VFS7c79vS>Wy>lL zjTn19AP=1Fb$TyzQA7A zVf=kgUKgNZpV3`l6L+SDx6aA4yW(0sYVFwlA=gHcLG>oaqlsFYZm;ymfaUTe!yacb z=+g?JEUG(^e1kj`k}_8fhTBWYp{+!+!a{_deZEgPzW;TIUyO7{ zU30OLY`#v=SGrwJxJCR`_D1l6kwNpTjz#~YXLJKk6cYFaw<=#Fu6-AJeJLwHvb-@4 zKCoQC{)+ZZI5I`tBUVgLhk9Ll!HNKcNl~|0d!V7x7d^Q^cYQTo>^%pN6dBlwbe% zWrm7g>lFfY`NEVUK;$QvW+==T&V6B^6Ob#N!FF_a>=k07TwAuKBi{1mq-qldV0-JR z{b-qWFjR z$f&rTYQ4?(q!+8mfOpjBJU0B=NukGhM+Gq4Kb*XTTz8!BEM{qc9-l=X9J`_Yr~8qPa~ z($8Ga>f!3EQ_$*IcHjsv*f3)f;%0XzD+y7+wElknF`M`6@6vA*Yp|nLuw2-c|LuHw zqW_sFaW-5S0-wr_bMcLoQ2d~<5O1e~R?MuLB>{4JNIdmnz;RlV3;rtblqQYxlg{c$;cALe?7$Vw9e1Ma z4@t|i#ynoO0Wtd#oVWY~xKvNvlw#)pmkQ)A*f;Tn=X)05%c_5__ezp7C$U9vx$-9N z46~FdC@{e)_h??J$~6KUVe`|wE3zd~?{du$p=ffq$a|x4*F6D4NmebKoe}-_HiB6+Js=B%f~vS248H;f(9cR`)pKZ zogp5nU(KYxm~X}z%i73doUS%fMJr^sU(d)O*+N~fC$t3Ic@4~a^JH(+AwV~Ts>m-E zRQs?96j5_U2}i;C9am|gl4lEki{7iYUzB_{;b&qLt^q;f#3;?Wl}Klfe3dn+!A@`M zDJcx_0}kfJXv`-%*B9gJ$jXk8>zZ2r=bl?br+%mPmGn|k*fkM{mQ>`+R$6Swe#n#t z-!=&m&}roZaF86jL5no_Y#OJl=71Hns;ZFHYvv48Q6pSmhp7y`{jJqCtt~AM_rM;? z$mZVoq}5U8n6v=qm8y#0dg9k>5IdG~Zq>c~%YH5Q#rz$N&sr0pLi+Taa~)t_T+q)? z+ykq(6a1`q{nT>bV-JmBDcp=Y$(h;n8;G^NtApLRjB@i3-<)okofA*c)0nDKJcuXE zR5I6!GR{P7x0dkT<3hFxR@8zIsitPFSYfIDsNip+B0=K9%h%&M-ssWJOF^BqK4PBP zcy$8~$m#_=CY&*`o_O`LvIP<0f%D(wce8l zmu0_t9H`+zumvWT+Nttd{MlIzWw?y(N71H40oCwjt$eCdmVhNezjDI_{Sa)5{qu=X zy+7&kBZPOb;FM9(1;HLNJc!83lHFbDY^p}kr+ve!}-hIL|^0#@=)-*yVwM>t(frUM;7q5?B)aXM`O0LQ!UfBK5> z!@wB&CINDbcRT9JQiH3FEnrQ|9a9Y$S;OTHJGfbExujYA2oijGqS%~izicPVg$per z8W1dZGXC0vBk!1Cz{^8|^=a9!DGlfzhm=swt*Arz_B|1oyB>~ucK0D}P{%D$W3o-^ zd-QVRD3F?EC6P-7?8xM!>~V9V|CjT0X9TOK9BD2-VZNXv;|flT=QPzxx8Kn7Pf}_ROA= z!;5xGe!^f~eMBIwfc1ILOc-oFIE2oRdqUvpP3?Tk@%hWLgGQt8F*Naaxl$>I!K3ZA z`ZS*c-0+KGbL8@{f+3Xj&8=e8m1ITvMms)fn?Kmh8xmS;owT65!lx9N!nFgT-Jj#P z^Y*lZ(rDxQIkQFEP-!R^E`JE$<5g zE5`ZHz^xE!)KyLG?phx{Ep6vh-)yKX`Vf2R*VoOI-*#dx3MQkRhCk1Qeez(MAU}G- zzrMobGcA`n=e68V@@=EF)*e3T_z})eEbKtEI{2F${LbuML;t)m3VQ;Q}TlH`t`0CiiUully$wXz`OUcS&_r|GHEB zdc>DJSw^ZZCAL-x;kHfH7xu+Y>oZ{N5bdDjsiuEqd}{ue1~QeViE(UC@IZVO}A$x0)fx6sRC8= zAP0wiub5~eq_d~S69baS9_c6@`k2yQV>N3KcUYDZkm7eQ8j@c5;FAFnM!i+=Xf>`D zgOqPv2q$&VPGuSfbEUgrZd^R-BSCP0+pg&irsh}KonI5u149_38>GYY*cgWs^KjP9A*;W$xi z)F4{4vXNN8sW1h`KyA+qxS}O4VEt*G|RGsSdLNNTmEf(QCEU^F;2%}ExJ?t8fdI1<;g{5?siu# zU)G+ERm*pxV`k;X_qGt^58(TFChQM$YfWco`RS6{y4m@~g+7*V;=*`h=l= zci+XH0OC=)uJAXvuWzDfv>g>TwsO3v)~qZ(njrGkR>_FpV~cdrpnDAA<$|cs+}t3ct{~zrT&6wR6^7N{?{1&j(#Z8w_mOdl5ndox24*i!}DZg zhYxIfja7AREmNsn@R2ySt7QaufJ-5P_EKzWDVj|GQYE?GEArWtTOu*~y4D0$FC0f< zZm17)v?rL0imN2zKGrdg-cfom=|EX00=psnb=5i^#XF zP+}scxD0dG`x0hHR}s761GEbL4CN!xg^ZzV308pWiz`g!bh$2~C8tvi#SLJ{{ANh-q8;DM~JcC(}ASetNHmC!;c?4ck87rfqgtt59r& z){xAb-=`kR&6&eP7H48`wVzffKBdXj)D=Xr8u5H2Kh+;^*t z#RemIdZr%8jpa3(qvcNLH%j)`H%LV@H9hou&L-12bLW>b+Z|{z;xa#d2Ti zDvgdkfe2b5Dq_Vi?o)+&F*>SRka;4rz?2q&cH#_Wp1)-G=D|$6iwIBpwFlOs?C4pm ze^cT!*!@ja{)dAJpHo5kMu-_rGw_!waUN^~K+@ATs>`2ezqpRiO0D}2ECkp7i`XCf z7{4tLkqc!C7xkpGtq!8&2!V=FpJmjgn5w$Q_Bl25MdwFC zn<&mvYN^WQNZL99DG;I^7_)8!& zVuAR~>%w&<3yU{KU9mh%RDOwtm_?zk^;hQA(G??$Wyz>8W9}{#E}~Wxht|XiUYy9n zkkG2oe*30?YfQ_W?_v^&TxxKYzWL7EW_bMqh2JGhU$pekIan8AfP^>_HIwi2Z!+Z| z6|fhwwm22hkg?PAe4+to`|3_lKH_Qe(qv1+P_eaAiOJ{hm%i~1#8;w0v!NqaZsLn~@I-hD!lWebf|zlW?+re#TPs?VO&p&W}oqA%ijiqzq zvqotgc2gSPy3In=r)(eFShl!yzFBj4IWnoIKfA$W6~cv3)P&#YO*6b|0j-Skp{V!s z=L~~x7EV~?cJD-(Fqz<)cl{xjaFFR&1(5xA=?H<=N}qORT%&wsn+<(po}p|E2?0u; zjaG+Umsgh}V*aCy$Xm}$hI#s$H4Y0w#7GX4d17^Z^e_M=x5n=W9884>^+Ad6$FZgC zi$c#tCN?R0g5~a9dyOelJSx?nzM{1utJTpeN+2$?7^67umwm;fFx}W(Is74E;@RBG!F65sb zsXtic-cU+GO(gmZKHW*NnR+Tc*}>t7QEbU8|6lHE@|gHKN8t4bpyy%%{IPfQTqd20(|dON8IjPEf!i|g5ajVSw9i&WF_W{ZpY8x|l+Y)!w$K(cyy7{%Ah%o!#5zPZ ze()Ic=vwxKc!s*Pmj7OZoGMbKJtHis4@uaeyQCwC_-aezlbigWA2|(9=7aC^-L`sX zokg{rWn3e{8g%QjA!))P!Yd&r8HNC^;f8k5>JrZC?7KFPLz ze~??e=c-g$As<(@Sez6f4Ll9d_{lhX=6e9!faIS|`Sj??5>$Ta_52pDBLy!MydKqU zFRSd5Y~-!iQQ(t{WpFf}WcTwrbIorLnMi?rIeWHKvO7H>7pOP4Y7Nt5UE9JgbgzxZ=T zVXxo^t7oyYr)T4jg9>d2mvATC&uT#v%ykN7BG*u;s^h!+7Nh`ez(tDC+!%_vt?eQrlV|UB6w%e zwdg$`LxG&ci{?FPITuztGqcOnX=_em{jyOtbz*Fd=yVH+=Nv6wOKcR!LZ90~q;3Ki zSBd0K-uZar7U(y4=y^K2|485|xr)$LK!Caq;3E4Sr4 zt+p9)tnm{=GO?qg`hv=sBYnHl8WdDuZLUl)bT)G57LT6&9-X01Uo)94|Llq{4S0*m z9u=S4OSc`_=+C|SRshv)fovtQov2vchFHuHFm*0EPg8gdi`Fy<0e; zz230Alnc@0v6#C`KFH~i+PInAikytzPQAm@`& zt<7Av8vcD7C5pedqjS#={Rnv^q3Q^yj6w} zsS9dd8elSEx>Ig72woh?Scg`6DYbW|^~boFID%KA$_X7B_7#fGX4v=UbB+bfiWw5p zJP0;Wy;RKdmX8tpQp3F~-4aATB^^+~GAhnWSv$V0mQxvE?ieDsa9)2;hc7oH*5;qZ z<3Dkj`cGmlr(c%F-LTdKGnz2~j~$=)#-g_y!}eCQx`$5Q*mno$Z9L9%UL-QDpJO4$ z4I{yXrW&vYCGB)}>zfgg2;DItP8wE?z$PbL;Fzua>JjevF(+^5J1@;SFGgF0riS|F zhTx^18e5arqE+UjRs3`5A%;*2Fc`FYXs|8un@?#Q=oumNyWIBSX~^bW%}3FVs?%e< zkeze1K|*jYpPtb(xr5-*#o3eFWlc`a4i6+$`HCd8`-~Mca-xszvG8E*nLw?h{;Pv; zp@N-vWMpU-JJL1=(f<%e&I&C^6K@K;7KRw*U9bF!PdX4R_n78Wz5Ah;3~VO;r4>d2 z_Q-_YAaq?>!LyT-$SMpw!N}bcqH!_vwMBZokh?7m%p?6TGi)n56q0s#R4QzzoP>>z z`~W`m%#=#v+zctsDdIgI)uVo@R(_t1-l2oELw4TKB!xeCDv{n?6&fFpQz{#LKZ?g| zwJGwAg?f37<`xmp{j#It*DMLu*~WN6{0Hdj_r|++`%fqNxOv=mFu=J3CR4_IfJt|u zPbe0(|8q(G-#zDFFi2qDh|y_2#jO92PV>>q-~RyD4F3SI-(3BnS?9nLk(v+I2ylZt z=D$Vvh}AQ`-v8BjzVv@;JXb)dtmKMOcm%>sg0Go(mm5RC?$LjM$aeHp1LUjU&3>Bn zEn0n4CZoH%agg=IJx7_ely+XM@&^X1YN5suuEimm0Ido6+x$Q$vnV~)7# z_PajUYW|7Qt@l6kc5ip%?<#&M1uw^xk|{fSq!euJw3>cKR9nV%rV;1<(Bl3jM^q}A zfzeLNa@qEXED-#`;Yf2J9n=8jJC7;t+@h$N#j?Fmw&Eg>y$XEo_h9%OHgooya>k3O zh=HN*qZ!F5TIUEhgR+=-3AN1SOP7Z9aMHrp?&qMCe}H0k{dvny%M``eZeJU zDJ-ZcrfQv~&^#n}S=xV}qYfnDpSY5sY4FvZ4=)p6Mrxzo{wSlW)BgQVOB~}o!Y4PJ zd%NFh<5d)POa2FV#C@wzB>BA!_5HZ-#6Ihe_^Z>|o7V4{vUH}_E`+x=lQnLy zuM6cVP~X87DY8x!RdD~fuUCRp!K2l#6FApOo(9#lu zLHwNepw9ZbE5cIlC`=PpIdYHp?_)*}E{n>mohNb-!_%!m_`wl)+reJj05~M1aYU8w z6J0x=w5P9LM(iEUS<9JB5>7Npbxu=x1FnQ7-~9ekqx0Cfg`XfBIbI**1fX6I50k?` z7rj7dAXe9jqrzxyQ`!i%ZT2aA1FoBleD9!6E6Yvz5g^ZW-C>XF`DL@<{$pJOy4aOG zPh5L)Sdq4UBVxUPg(sP{Oo;^dcI%2a^SOz;MXFxEuUmf=i^S8jMzfq#zZ4Nl`%dxx z15bKPlem^dbNQ2v>HeV2moX-IupFw4x|OxIJA~a7&Jl7)?!fMBfH*|a_-TYbV0{SP zFkDJNW0eJ^YC<68qTf-zlOrNKAtTbA4u6_SdH(~$pE#i*A#~3j2(NmFD{H4{RJq)Q z?aUj66)2V7Z?57sZ7&9^GGVM4O3RA-x$a-Zqs{puk+iOt`W6O zS0pFGXeU%2Qm9>ivHH*zm%}2@lVe3U^hg>yBbZ z(Fq*Rnka_U%(~!3eoxD_-h-po6#8C_?<<9c0L-9(e^M$u?P24daD`G)>EvH_Us+D7pYkA%%+CRUHB*E+reXA0FQzZxSfsa04*t6?- zlFE_}S8TK2Cvp!682P7TT-{cHnveRefWGSb8807s;fDPrY@ExFM%DyC1PV!QZFl^Y zy=TF(FDOS`3IdN?+eFemGIBgiuW7tRVIYIH11?%fFYfccAD_rLGJ^{MTL!RMeT$cc zp?W!XUb$6TeznrRmK$Asbp8X*Ui0ch?Y5OkLqLByIp0?=UmC!*tp}!k`G!u1j%isl zRR#Kw_h^Fho+Cwuwb4>kaRE6$hD;6-0N%-4w7@hHw4;X9pboQLCNk-ziBZH#FXu6U zrx?KTAK-HvJxQe3H_yDL+U{ewi+tCMC=f-xs;hL^R;s>w-AD+G<39ucv)$4lnX z+hY6WtBWw&btIIDFvjFeQ`LirNy8#UF!)XoaWz-|cwBx~ZF~pTPZz9upFDZ8doO40 z$=Dl#@d=31h#%Z4TJU9WmwX?Zbuz0i{n_qtT@9=rcVu5Ezi8yv&ueI0qDmzgF8gQO z2>ZMnpGTL{5RAoahARGn>mLB-znR&Mp&$2{mp0|bZdEflC{U`C7h#q^6a~K_hW4vokAJR!cui8`W}fdbG$%FS=~%rp5d_4cPonK zK{!GJykeFh9q}nFoXwND5tSR>P;oQ0in{J8V%aX)qF_;HX=x?T^%C|*4g3Oh?OyxT z!AJ+l4Qor8-dlP!F9!AVRQ^$CRf@s7B^h~%bh!b-=Hw^Jn`zC`whT%S>v+?Z^&@)v z$BXTMtKM_o;G!ebCL$stgy9jIrv=z;t5`XvvHuJPcmd|jO{=cP*jVQ~P~BKI^pf;6 zG$W;q>{iIbI!-Guju8tzjQO`v6@OL>kw;VFstN(%7ExTWhp%NpgsHB0>Q;k@Y+b{% zq#^e>;rs01@5e~lrBS?u!BLb>*BMxogNbb7acL>(mhoy}0mF96pxbag2_?!4A z)Vwq+miQXjvqU?_!CB5d#xnmgEU?EITipG8H&IoZuB=YRaDE_TUj(zXr6P;|L`G;a z!H$m*TRmuVaX#BTlbUSPLdpsZP;Cjk9i)npo=$z3!g^HrTG0!43zE5ft7=SQm7~lk zbDatEswXzzTRv7qP(^+inwU_d);%Z`D|V7vZQPb~gi0-xi`QI3ZOAw5)@A;*jc!E@ zMTH9uz+uj{S5pZ`?7XzXnk|(*iD-`JJqu_ltWWh>gvXI}12Zdl@3Esie5TRAKWd)` ztEp6PExaMl(%b4I0Ifc9nJ!LeHNsBxm(Gz)k83LNociqv5OV5FzS`{J%dxgE%Eqc* zPqnxUQo6g{z!l_2{7WktWp$?0#fjDcHl?Td1{wACVZT(f^Ngs3%%i8{6!d<``2;sI zmkQG_Zuj#$ll_C}9f9qZt>BW~yj!lln2;9T`!kEamY>h2Nv^5+6)(ZpvH^lQ)qU!+__h7Qt&QmK)!w1iq>r_GC(N`C%^VOIhxqrjKb3gg6c5?e~BGyz2zGa2->wWQc^S0b8h z2vwGVbydCK+IcJg{*O#3cqZPdP455=ZUrup1&gC7!EULzR7**mhboe+qXw= z7e?e`WP1Yd0=Ap@m~DN@=eW4XsnI1Vt<_84k0&4VgiCe!gy)}^vewqn(J@ZMpd-bx z#*AEeo2dypKUvS+_5Aq2R$!)Y7eX;kkF5F2N5t68^DY=PSdM*RW?digFS!Mtp06a7 zZQKPT?QL8bG1qmEIEJju&#o!FKHS;3PUxbi6bx5CWJbYeQdrg-X7673&iH8lh_U?| z{l0Bxncr3L4tR@wMjw;nnU3+FPqF_4*d#wMWJJ7uJKYovz9HCz5m*@iI$6UEB^X4n zwZUiEOLfDN2)~TCAu{JpM*Scze7_0XC6w!Z%Kx$oo*inB zn>~b(b+lDQPg`|^=e%NnA-NEuK40}aO<=&UG#r@mTqn32h&0rf38aU${0MXOITzF8 z0ZpnD4;A;HcqBYS;KPe?xl!upkbb1s(=?ykxY0sEKA)%0Zx2tiS{fi`O$dKV2R2Pe zZ@URUiBV6hfWArhQ!SL+zZ%&WJ( ztTj?#Jvb@N`9u96a3&Mxyk9=-w2rTx+-Bg@u*%n2Td`t(iXVlVI7;u{mm5j7Yb9zQ z(@gQi_&=M~=pExUjz^Vk+D0~Lk=buUn{g)^+g*ieE#2oBy%ls#)XhcCgrYNd5JT=r zu-we(ox%8S1z5OYEBgSX0R_ARz8TDIP$ufDu+dg)yZZBN-z3vNfCM~i!hzG(q61XF z?wv}PKKHEGH^-h0ti|D_q@@Y?=fK4oxV1Wxa0uRs$2HC?D4Q6DQbhe z;9IuV!t}tbOY_=cyq*@gnj30#q*-8R&|!7X(RQv031mB`mzRM0d^12i~8eH__=}W^N@pc0q+@+Wh z8X~Y5k@%L~q0nUVwj7pen&#j8+0^@i&r~B(IlhpVcnp6yPYJfyR%)EKfe4Y`I0XGX zaPmxbK5A}7FISV(z3ESU9dM;+byO&>)T5;(rUij`F;LtN)TX{ibAJc6esT{GO~<%b zQ1n%>-mMHMRMVd~k1hQHiTcn8tf+3QjmHGTk;i1n^BA{TCs2xA51t0i&P^p=F*Dn4 zYp|45&sO+|2*6AeDh`i^Bt0D=Xs7PV(g$IyL#@q@h{Q)EK>;CwV zFR+6W*#|5x^0(r%!@@;4{)~`7?cA%HRi4gJb7G480$&3<%RBb5(=@T0ym60zfB}x= z5wC_B+V(;|XcM6+mR3^}zZ^qe9kUnpw#!_b?bhKi>||X=5rQKSM$<0wYKfZ|^(JzR z?-;PPYi+lEG<`aF34>We$`FgZaEU)%uy z1owsJZ2pMwbm83Ua-tcXbfrd4%{5Px&$pw!(3P`Xvy**s5b9qH>FYi59RA;Pd3Ula zRr7UYuIJOd=C!^oraepq5q7xHb}@EkcFcSQ^P`5f37|56=}L=$+w~7w(#`R{yR(?_ zs(rD=BWFRH@wG}yo9uCnqV9@tCC9}uUR)dv1M7@+p|1Gr-2=F)ihls}=^Aswp?2wM z(|-T}?m6%D?hQ5XXUiu!<+)kHvT$G2narMU-r6Y!J8iXf`Ngo|%7>WZ`wBQCv1J;D zg-yb}rU@deEC%gW{#P?&!)oWD7kzSIQ0w315@7n2J${0UGAc4U4%%E{b=Jk8j3DvO3;hWh{i)V>i;pQD19HvY@!= zdqmgI&@iViIHjc|-!0|O)_bkfW1NoPJw-&{!3_^6J4HAkd+A|gE@T5?rU zt3XkKI9aBDjs>S!%PKUHAzq_)C{q$sR%Wd%F5| z-Ez@vO)HsHbDc=}T4G*>=vD z8&Hb>RAT5CG|+Yki0+#$<%V@?R_01=4J5 zu01_ZyYyXV00t-z5!BvO(l&5vkq|S>u~yDxPM2dT<{$JUBZ?XWXGKVDimQZHJ4C zePBWv5$|uPEy8FcinfM6Dwr^J=-4GMw|Gy0<4Q@U*~VE*W=$#qtU2x)a~^o2qZpL) z6iujSIpj#z8PEnQJ;ds2R5!2*=Rok9`!?xYv$2zU^h^$lLkPO`?BiB;AfkQ_BP1|7ZMW@bO)gB6Ek7Cstj6@R&q#Aj~HWSXBn(ovCz+Fe3Qz2SJjMmDlt19w1?vsl#}1w${GG@WlWlM`!`HCquLz> zrxGsxO{;XjSRy~@$@=`l#0jc>a6g`ywfb$C&ym;A7iXBZpsYD3(+S0T+VW9Xt{2%t5<0_lpD!*Xq9+8ci<`>REkzIPyV?gT7SyF~kzOY@&0Q~J zZ`e77s}P`#W5+i}zH_s^oY-qmbTOK$Ha50gS_Ks{JW9)z-_A1jM%c;*|Eqdz`@cpkjp2U9+o|WWNi`i0I7B5bh7o=-g zNHufywPI8r7o38q#a{?|)WwkRQto6D-J8OE=b%UD-Y30%V`Hl)`QO(IGhemZSdP`d z!W2|BWFLObe}H@Te&PcT6W(Fw(`cYmCP?4fKk1W&NR791ZA( zsyrxg_e>%-yOHz^Ovq1HoaYD6vb>f=O7Hz*k}=_iS_AG>Jphj@y#kmownag5lzrzc z>NuD=6_UN&LvUPzAU+3u5f_@-dM-#PKNob}BKz=-uy*PU^J2R;b=R?nlA(m3Q$VZ5 z0*qMi!S)L?Vn4q172V@c(j2&kqNCldFrmgD_#f^})#kgHzIS@q)Hk%QERmEZ{s<(;tXlS8$XPs`%YWVkt%Zdz7rv_F>)hAdE#l6*H5Cl(URv9TBfwi)s^758@v#?g1&Zb9rC5n(u-1tOOb)aUU?7dJg)UcHzVerq^;KHZ_HrhAXN~CYaeLhE`*5 zwRlxbi?1#$mK(H?r2Rh;&i}M)E#eQPd?>fL2j*<^cXx;e#u@yXDyL!D4|~SaU>4l^ zFx`2Ozwq~7u&1T7&id(N9FcTX3E+^c;(fq>fl!iQ!Y_gJKL8}z-~o06L%DdHD&18e zwo9QDJ`39TKOK@CV zrVYugH?{PH$mUt`p(}p-Qo}W)e`17J1tNt-0q+7^5rY|pi+C*zb{w~pAuq=&VG$x; z&uLqY8T&t2d#j)}!?kTR6l>8!OK~YuoZ{{jx8e@PU4vUF6o=sM#oeKJad$1Q3GPmy zJ6-Gl_xBy`qkWVa=AAc8=6Px>^QM+JF3#Rj~ zX%#;LhS3Rss(LYa$NYxNPV5fOwy7B?t>VekqPTh&hR2?TN3h*i!`&lS7&-Wb2>Mns zQ!bn;2eYX^>zNjRO)seRbfU?E5D2)VLVTEU6p!cmNg-()+82a=mT5*lHGfOhQtakvS-JAs z4Ue8bCfRIrPASu(ks(V*%_Drw$P;bEIGl@{4RJ^VA!aA%Kp$SPXssSR?zZ6{AKSaG zSe@8SMOxkS9RfFw3~(YM>iG6(dE8|=897~~85jdu52Ylqbxj0QwnGD$?Oo;9l)nT> za>~pI%E@Tz`!11&5ej;1as;jsNhz1!C{hsZFjyf%CnGkH+huoh2*<1RY|f=Su7%@oxb|I!pLp+wy*gGI6$9-6QhWSMY*# zArDk?upGtn)e8$}7w#C$Eu{`ER*0#@b4DxhQdjrGqE`Z@aPDrDp4#3?0^^wh{?_`{ zgAqX~Myz zE&kDE0x#Se2B zqanL*+0x_mr_Yb^Q(B|mY6n41F@HJXufhSqNmNRLGn~b!s`|A;3+rYP@2I1HNHQtf zxsds7W4~QrH+Yc6sA^9N*E6BJu{gCtBp5BJVNjhxzV79Nd&cTokr^==$V19VDr_>e zI1!K*%9+9@-`e52SRrhfvm1-QLI%i{B=5{-R5==iA)88E?!xJr?$l0mQL#Uz+j$RxgIi}ZQX$d)-`X_wLnqi# zjVdwqt!@`lY?tz(W)c&i>My7lqoCi6L)%P7wY@$x@O2hTv7ws8vKGWgT5VF8n$x}- zhf&YBDHq`r5ayqwyE&9pGY)SIcKrlfKC{@`FHZjjq>ajDd`uVybBDTwXe7A2CBQ(u zOX*V9y-he()KmMBsk%2Szh?DvbIJX=ovXq+cF@Pm)Qz-7jK56+GWbbs88N{5awi0u z9yYFM{p=f6x^2xfId0Kduhq8rPOM0~;|?e#KnDvIPn%eJ|63X)Gy zrT53+Pi0Padipxi6c-40O*qHc!cdtSm7#Z3+2h-5vfk1YHClqFMYi(rTW6<|iU)T^ zf9|QGvcntd$Xp_5^Kuura7ww%}qL zXd&dKYx6D{BA;-28f-_$H6TsVgc#0XeJl+x@+`k=dowQ=!;9}FR{Ry6sui}iR2ok^C6o6v zrSDIS`x~+b_xY7-3vCweVxqdtEa^<@6AKJq40K8Gz|e91^j$kvxX zlnZjpSIgqtUZa=E60<4Yb%IIGK!Y1LAGS#W z8wa4+SL43BGlm{Ii{dS8rMM&v@zU-q-=hH@88@@Qp&sz0^A6P~+GGVAJNtJj0O}HR zhVi0JRb-1+>%3z6Gc(~v2&fAd2qWVer2KVg<0>uDFKDnSQ;=0;F!JU^|4@;Lx0KAQ za=*s9PR7hV@e6w&9QKbr&=_gI6pBo$C)JFZhktkUPpe^gyy_ zO;*tB{7m<}s1T!$eT2ZAHiYu4_ogeH*SFs#^`Wx_vM>W#cIQYlcX@y6wtM%|D9&i} zm5^GCtw{zNfi(7qNvCTs!(Uxnx>#tNqR-6F_K?Z<=UiLfMh!mOD-KF?|6J&UMO{TT z@$KuUdOqy8{11B?O6t4cwVU%6@k&PyaY+vc5fV3}T<=P3Q`B9>^_ST!+7xr~1%^fu z!Hpz)PeO94H58k>WDSPfd-e2_0r?QVLAm5nN!KvvS=!8?uhE1zixFxOH1UHK(BHkL^fV^oEcMRKwQr@T9>R~V5S2`ME zcNC@%Xa~88rXw)|_#gHrRB`O2h=FY}a`TyG0~UEa3Fb`3LthJCDamYCvCsL2lNR^> z1+1-#1y9V2BakZ}=-)?N6lF&5Z&_*$dk9f}3QZ_pA4Vkaz_{-P{q8(~iB=~>QHexK zEYH6irjG4~Y)Ckx9Ghr=bighFyal~NhGPxRtcKb3W=%I7^5VBCYA2~lf?5ERhM9{C zJ#s83`WFPH9(JcVwBf0>qKHAsq|$TVs!s9qxh=Z4Cp%y-lL+N&&Cyb$&eY+RqrpSA zFDAQlS}O6Qr8>QZorN@GwkC0eQG1%SJzi3sr8liTl?sZEIv(Ws0<9w84@orHLiVF_zO@-9k*w|tnfd-L0#`e#|h0Q z$}d#W$!}s;)so8k#l)R_hvb8mdg%3H zG*R(oz~T!KKC@>P9`0-a-(oYEbOUn|Hy4vM%sO-sx?8 zErbA{<#N($Pyl$#?#TZngHS~N*8@iI2b}*skY{R1n)r!M9*@>z3~2DaR4UQS#8tJR zltnw4QB5=#i}(c(91L$?9J|gA{{k+!Qfk9bK@|j5qo*JU`FVxw=Z7P|zW|WdUqE>N zQlH2IhL-uA$QAazCOeLs~ir}nm#rmKSE)wd&+qTg)x$%zj$weHs=4K=x*7t zZ-Vgt_)WqlwnR11_z@!JE{HpSPEmCWzrX)9D>`NW+3_RTz+?+4UT()ZQV2)(01Q_n z4fdY1Dzi11q-@mUF|S?uh0r1CS`0*-6tr8oeT<4<{hWo)LWDz1=8P%rHF=+#*i2``FL@ux%fuAFTZ{QL zEJN&fzujtWtnLRb9W)|>dP;wB_eT%B)LuNfMHw~`l!l;aKH{t#BD+o$g(jCQYjsQv zSZYR6ra4LM<*i;N5CB~G|c*(yjbd& zT=sLFH-cubTADu;`)qBz6)RuzKiyKgBG@EJXc5j>kbJZ+EtS+P+P*WIc~+U0e9{+T zT<7;MzcJ$UquGjitK(TN);wqb`gt2Rx<>q~`jyI_yJZ&j_BFhmi3mE*ezW)8vPtRE8mjpS2iAzYdR|BMeqoG)T-onK+TBC-C}Wos`;@p zN9-l=P9xcIPyLuo9E&>kH%&Ow&B~Vx<+TA&H^t#Q5hu*K=e{E6@Hibs6eX<=Z5Tdj zxG1T|Xb-{tjyeKRB`z*UP>kC84W4?!oz)?$tdvUGYtcUS^^{r}y6ED0!;LUK;j2 zR#%aB3P2ZJR1ieQVJg5exy&fix#xXW2sFRCcar-jV#+>ygA$iGiQ7)Q&4fYl!L z0>)u`h32gSIhcajg;ERCWgm~g1v@RLK9f_v!?|PG=hGkwo-qC!ql$;Ybua7x6!l zi?A`a=iiX%pVQ7ik(upiVd4%6wdRKUhpM7D()4U+|!dKM%^Uh0xsi*1&_^Iam&st>LGl;lyVGpV5Rs z46OIEi~1`cwW^799VX41&m*2A7=27GboxB#R3%0>)=lrRQ24c~rEv1e)V&f)>Dz{m z+F2iyYHi`f1;_@0X6)YL#i?*3SEMSExJ*zd_++S^q{~FRxA+Ofm6hdSiia5O2H^96@VUMJ8k>(rl+eg6hEe#Ojh)M^v zxZ$-*bn4>`c;#Y?EL0SBcsWpgqfqPFA$*T8yxLw)_tk)hx99rz$>5PFaVuV53-ZGN z{}ifUfniXi3&J%g!s!6HLPQ49s$kHOWZ>4WpH+>%Q`l!-*nW-v8Id* zB2W8Y@rj}E`by~MUqEL+f-~m$FOpSpkxi3;mhA;CEC?I=&$8_3DQp|ku_SQS`qAq) z%D6XOhrA#x904k!jLAQF;&A!(&UumL)zFB-d#hioT5wCI0OCy}2Ay*wYzLrLi zh~4NXdUBJedfGjI$w*b9vV}c1n0b{m&?w7{li@L+L?oT;5uNYr9&3vF81ZUkkYif} zTX!RVLNFulFM#>2-&u8~Em{?=kQ`2Shcc$wXZPZ!dDFiD--yE~M-`9(R`{Xo3tpEz zsX7~?Rd9pCy+vjsw)_r>!GO;rrWqWU%qxWV?e34wa{qca$Y% z5u5MGKtlSS2b*ccvOp;o-1EYMc^B%W26n=}-t}3W?_mqN)494#NWY8Ws!kRX%|)fE zd!AJkfL9d4ig_L+Scwm*6+sgT)~bW3)g3GrA0!AP-8ie*8sNpuAw0(-q&QS4`h|f|L85mxhcgv zSf+>EU!Hs}LBY&}o#O;^7A|84C&Z)`ut|uRidW zn$p(&Vv~)6RdLtc;AP2NQ6|)$5>?J!tm(@GEd{=uZnUErQ3<*a;Z^e2%2E=>TZCvb z6D6w*{kb}MEZx;yR6rw2PHm23lSSmeWLtWQKyp#ljy@&@I5~;oF@3r9_KG))Kz_&& zLKQm_ojxMNIk#MvY;TRDd>x=3^&)Wynj|3_DKsa=k<~xVJ|rN}-k0H_yIeOXr^FTm z7hg|S%kA2C=xCCb^xvj#1zL+!ds!ex4^|%?iGTCP^nJL_`&8TdC{t}u_$xv@1XcC1VYFusq%D2E{(OG{2r_2;1>f_&1854EDFAK{GDZig17RnHwql7o zkutqB2twXwZ$%5(N6+G~IbHY|&|+nHg}YwL6ig9MS|hlePJ^hkTbAz&ICQtfSAJ6b z))YmpF_yq#yUY9T-o-2AZ2ixPo}5?fn05>qKm%X~cr%x1_YAP}>|PnVahbVwe3{`o zsC4^dC-2Z~zK$Y%FpQ*`9^YUlg64W;z}I*pXtcl&zaxc}Z> z`0U-f%{$BiUYgABb2-X$3!IG!mbKA$RwXIInDWkE+l)`6P3v(|PrT%ea!(mKenpM) zYD3ED(4r&$jBWxjfJjG15_K-;(x$3AKlP%r#vXT5p|330lER-eJ9j=No9n}x7stt) zWLm3zdTO)DPi2JjFu{x4u1!p%lNYkK%ic|8M~XF!O?S7Kd?a^HgqxIrE^E-6qu4?0 z@DBzkuqZYsv+ptW-{FDo72=^4;==U?{=K8xcZ=DZX9fuO{#s&7^GMveF z18TkxIU9Quhum&z$BOs||1mRRbqbYUl-$iXo|dT$8*VJAUIq3saL}o*j~aI*QBATo z_{#r1E@4i~f{0!{CPS(wB2tks+@dL)e%{1D>hOB#@YsO{dyi}cfJiubVA#aY;P$O@ zo+|$x>hY}IRSrJfcI9Mmz6K#mL0pzHW-Z1zZV~TBwth@7&5o9bR~&B#>i;{#c|&B8 zJer4i|4o6-%4q4@um^s6e0>iF`1dQ*Xf$NP9bzTMZ1s=m97eXZE!P#VFLZl;kdz@z zIxue9@QnRY+IK+(WEF$iz>Sf`3tMIUdPnHI(=)P~J_8VIdEdSqWt*oWyD04n!N?hp z5XBz|nLC`Z9EleOKkoxa4vM4YrJmG5^#N>;h!XQQT=`R%0$rG^{T!6`I3TYW#uu(p z2L63_>34+%jodJrt&(q@n3NAu_sByhC%OaN(*#QS+0c$ZeNB(j$tXBlfb;`aa}l(S z=fD$tC|}dBP$q0Uvv;Z-5`BO_E0JMl8)Q6;c|-fw`Uc8BCUuec=7O4HdxxJl^`V?q z0=C99QTa(n5g*ESY$ke+AMo0sg|BcD!5s%-R;VPi2)}l}qAv4eRgvMzhB>f}Q%2(R z8?=o$Fat5xJfz$q0W9|xkK4%UI$;Al?_Tj8#TN1)nJ0}Z(wWObqTb zh_trL3f0#f@Ob;p}ve^q$^V1hA(P?+Vh_reI`3bHYFym-Ne#l#h!Lz`#^U?kb>i38?25zXxlt4p-urvv z9c`EL$V#DGba4##YRKg$W*@vrZ7d(Nz>xQB@smG0+ajVPB2}?yMD7k!nj(8=F6bwK zDX(Yiy*C`yt)Op=Pq?d+vz`fi_la6%e;Ta{2Ffoaegw|Hb%7TiLPwh>4<>%Qi(Hbs zCi;iC%C41!Oe2S5YtBQv^HPclDmuiP9`B+RB8S(3ydyGD>KuhGfqcqsV`&7?EqX^U>HMGcnQ2r_;*oOUwLAP$V$Q z>6gWe593O=^4vaY=p?&H4_Kge$^hZYU=;B?$^gNj?f!*^Y^ESt+*Q)gYMy;c`bm-G9yIAcLzKG^K}D~vjfP0-u*m4VrNBBCjyqBrb6#pEpDPt!`cu^e zJz}!Y_o1an&C}z>8ChgVirJEl*Qdmpdyy^FF9u~FB_(Z3R#*6ZvW!$)RhxB#cSpR# zKUtt&ag{~rQ9ArFJUrY!iK{A3wut^f&CX|1l8=@z1Rz0J{t>_Qh4c3#aL}Iu{A>|O zSueE;--T)kAtlLF6&LGzL|Wqf{Ig<{P1#(Zyv+-PQ9a~Fw?kdx_W7^R7CHnCX_vZ( zT?G$0*K|r)3X~n$+UGPE_D(A~j~n=qKtxr0XHkCvp9_I%eOFTK>5bzIU!%-v@SC@N zuz$Cuv`sgvIfr@{sv}*B4vPCX_JgC;Pg}D?a2ueC;>vJSh77$Z8E}DRlvbt(b4-$; zRv~xVw%&@%>u~Zr&}p`$&%I6d%$w{FlsWYolCPY9qvFl|`R=1=w~Ez)sj&9*_ZDO9 z8|LEVT*~yPEnUje z##_DO2Ry6)w~hY4-SpPbNmrv=!Yd2jIQcfLU)R;>*vc8e1IC5jaBob00y5Qrdegu` z-h4deq)$;bze4$RCH+WYS?>5rDnI$KA+7_ANSXOo9f}v2y2nR?%$wuN2Ei;;8i7NZ zUYD7OlW?JhQoOv~CXXgK)hD-6-Lnd_HxT^|3Ieo=QQqTAhr6Y~He9^jrj>bOMc%Pl zS4km!mpq+n{ySM#H;gg8@YCA1qmtZ$Wtt)34WDUa1Yn#B5Rp&I#d**)PCbV=DO!78 zn3WPrH4AA5n-7@Lcrqy|iM%toXyv7TNW1oPCCL*d=sJ)71M+r!+6M)@`q@}!JSR!F zy>v=}bIkFgP~byD<~9f)S0V&*Ix+H|N?b5@N$-jGEceoa37-O1j1s2Uy@u?KQ%xpo zXYm)%!(;w@(Dko3s$M8^{tGZyIfd)=$2Fh;$dV?!#YD+*boAvdZAm*-3JFzLvj!7# zj4o{%+(_w4`cC^~7cw%lx31(M)_RQiyLwZ8bn~6ouCOt|*yI|S_=hzt7viY}!@+FW z$U$<^&Ut-#sNvkgyb2VZ=<3&wNH!yWf^k9Bto+=xX*u(|Uw_=})l{1=h39GiAdCuR z(!+Si-HhuFIXAfIU>p0UdU&edim*7t5p=7pQ&!(!o!67YrYDBcM6TPbk1WNU88(9= z6$ZqWl6uxIGU`!RhVCrY4dokk{MHi5pMt0gEKlMybH@runuXqbTQoV_-p4G$zRUV0 z%-oR5N@drg^w#YlJ)&Kn|FYCAra#!WE#rJh+Y@Gi35J{!;yZBTS*b{xV8il!IZMnn zSy^t00twt^#1$rGWqpHfD~CyQ|9NhH#87E#$6GPbl%$xwZ*ulbY4sQ92`xGfhwO{EG3eHfu zxO)Y1GdRDTqn?+|N#%gKR`SZ$tX+`U2bVjgjyc12T3J_{lYMwJ90!{h)6GVvbC|AS(PAL790%@poJRs0 z6Ya;i7tV@5izj*FLiqXgvL&439g(=+$(#i3(%i+lFyY1PR6OI37VyFW>S<)z5BK4{ zjKxE?GXqz%^gThrk*F1*Zt-1qeUWD{t<{dDI)*6j=dsGO?D-B~!S%MK2fA&_y`hHM zt0X(O{|wm?{yTj{3DP;l<%uIr>Q2Q@ea{$lzv-{B#jnD_qGNygy`=7a_O45A0cBU z?u-)mSO2~(W0K?p%9e#696i3-7Whybud_Anh`SnV5iQ2}a!%FkJ(J;6R$5O~#$PO1 zc#p>!ttOQignY7B?rNs>P3yWGqk-G z_vikI%ss{@p0THnxa;P~>J^3aqEZiH`*=oohV>s&h>weTV)W_}mO%z^lXVB*4T}__ zq^XE?Ld&#=KSar<8@Z6qBw5|FFTQO-N~12acsqV|j8xx9SO*OyZPLB-KcuhPv*FU8 zD1_kFzGj_!i(S{?QW%~@U) zSu7c9vR!eIXHGOp=}YYapTfM?zb{h_K(ydm9R`>gWVd5NT11uoo*iD_o785`LcUT?&Fr&ftIm;%)!- zxLkChLHMuv=beO=<^^zG9r9Rw>iMe2O;MveX41ezPKTQy(xFHp{=)C%6lO+O+Da?2 zGji0Jl&yD@%r3hx^4c1P7p}KLhR^|iyaEVgw8;QB?rSA;04iTk!W4Pph0f|szY&r3 ztuXWX-g+E$E$0l&y*8_`eo&HQvFWj*JaXRd@P(2+Rqxb6>qL%#P4dS|T-VG}+$t@o z$|9om(WGz^j$=j=90!?3a@I?VcGRyMeOgTs!dE%^n#GV^TW&RFC)s?6B3q1NAv)oZ zV<#rG$~78m;t*ol5-(p@r*Qr=nMRiI8@u5@fN^E#ih_~PbC^MN4N?Y4!zi*w@Vl0swFZ^U4y&$QUeYlf(LrW1M z?h=(;`nmm}Q3S{O(JicPuIgiRSb*3%)@fz{A63rLOjgunlA($Jl-Q92>PxWx{v6be z+0gNX53R{mlxj(t1axzyEB1$QR8s<2c7~Ixk(5*?;ey?$m(-^hs`7nj-RyG7O_eV{ zRa#|Bpb=$%Kt}u>;So%KLDhpRyfA<5*yqLnW|S=Lm_d8mNb!lYvc#|Gbpgu3eV~*0`LMkFeDD{YjJ`{xcRUQB}Cw$zUwKYtVuCl;V)@)q|*ig zMaoGtv@cEsSwAwqlC}(D#u%bL;0^Mn4=~o2uw+rm5>h$0?IHQL94rc5WD-SwvP&AK z>iq055=K&&3}Hw83n+(O$S0`A{XB34AQL;2Jya$CjIl{vyJ6X1$CIk<{;{?ill!~O zx#@Uvna`K*3j2E}@`YjOwmqtLn&J8@=Nzio=UZUW^rJGbB1J9s0xN~N8+YY+J&M3A*7?AI)r?!Up(&d$VL~w<>1>EX zUDN-dfQSC5wXw0WA|je*HhY>y^e^DMYn4@by%dM@<=bYYIM`7wL0!e-M=k;_!Uy7m zd7I@Hd_m~W-jp9o57O5ny^fQZZH6q+C-T@T?`5g}ULF0*_(#qBZSyCQBxhIgtiw0x zL5o5haQj+s*16k)gNds2`r^eC%eJ-#@T3((8ci!*#kZOH3`L%w0vnjiM;1LFB;HxF z^$-%fjvpiJ3*0gt##=tk6!q6D8^`>Zo zZm(=NxyuZJoQ8Lw6JEXhp0yTG$z#Gi3+xhE z3qIQ)yw{RmEb}4-Eo-!c126!nHamjn|LG~9aOo@DS@^abUKjhtoL5a&t6vIXpD?UT zRiza77OfC4k0vtdLHXcgV9J)mc{d|Yur3@Zt3M;`WBSvV_1vqqHIR?xH9BdvRC@*> z09q35X(Dj0tT9<{sC)VQ!n%LacV_9K*Kon{X57$ES|xQ9$l*XsfF{5I4nX*gH+JTS zbsewCS+(Q$xz`ykGdv0@Y=Uh51-Ov;7KogYw2)l+tjF*zQfkjdQz1ME63|I@w~-wlBPPRSY#}jt!?LK(5nl2>T%v6 zpD4q%KjdyBr44n{b|qYpU~Os02+z~#HLXRuHl8EjSG2bD$tQ}vjTk3oDK4(u3>r%2 z5Gc;D!smmVrW2{5OwGUGF<`>T(ow96w7;mMYFB#IKazDs|=S*(Q^lwX?r& z4jnT?jJrWy=)?{7`kEr>A(WmtFF7*d_<~mz4j-$02A#oQcfs}Nxm>UArPG33tr+57 z#$AG#OHj>u^x;42QuuShwm(6W@*7Y0T`)y&qvgi7&qoj!Kc$?s>3fi5)0Ca=%y6Mq zWEuz6D;H7Hfa@y$n>|DQtJU=^E=89<*lnE!&R%QnDu`&9)qEAM5h>g#K{Y1#w3_U= z^_31`R)EQoDuCd5?ojq5-41OS2S9mgss`V4KU>wjDP4_?#elUq&XO-ArcO0!p}N@d zIk3g(YBlAx%uN<#3xHquDHZ?ITa`xZufl+Y$&G04@vtL$mkk zj{I&4P77FBk@*iZfc!jS3FN=?4<#bq6brJNzr?QFe;lm#sBV^A5kFG+S`l?MD(f!yU(_z)4@%GH-@%)Y3}$$t{%AkrDL}j!fX`c z`>$WlNnS!)EQ3`%q}>Gd;_HcAmni2AP8^I|A_+Br?6Pv@Q0a0QS*1zqf|x;`Xb6XF z;$fLpF8oQWz=7$KwU=p9M(yr6`f?q@@D6P3-+~%TBYO*N*)q5vocBtH2#QCf86c2D zd0PP~@b?i1f(a)EbG%>jX^o~+FVy$;cI`}y@pcAR;XEm$GGo}}9zs`(&2p*3oN-e> zXIplc156nvRPw8)1qK7-q}cMR7e>kqKk0{5Gn)PJaO3qbspdG( z-uH51TE(WWd?Pb{X!btm$I3cX`*mVE>I(!p`&Bl$NRp`Za1VqBvij`0jSJu!Q`>cM zxSgaoRD7D$ITudyGR-URMGvoX=3otDTlU{a%5;SmdwZ}aLvH`f@uZRD$@`w>nq90~ zMzAoFT^~gpuby*Ln&rOMJtcFTeo2c|$y3i=Ge8i#QeF9p-zrT08mF_dVer?UAYN^?9NOt-Syl zH!ziH5RXZ`v*VbdOP4(r_WJXKTK~HLv4{uZY$0;yq&zGmLXpPwfb3JU0gQ zYG$<`k2lveoM7w4TzP|i++Ul##4hi<Ll?O}w;SPAdJxjKEa{q#TtdZ~8|cgFVm#4tb)QK6c~1u}xK- zpRvtIS$U5GwZZkA{0lJrWh$jqIcHybT~02?$+92r$1i4Tok0A?{;Uc2%CsmynKRI33)Fp9qTie^q@;FKJGI(+iJSIL5cot zJ`Xh>t#{ye86mpd(`8h>?MZS}fqEH#_Ztf8mH}riu#ikUbuNzxe5}aW>#l3Q^sCuA zDgf_c31@OksfxwTbo8TI9+AWTa+R7BJOT(iF8YhuHp?9pXzOaz@1LY)`qQF6sgQy9uZ2UT6XO-@E~IYk%If*?4u9dM6BZ8VLX=OX2R6x=Ltg zz~O#P4btSH9LWo^%AX_DGmVVpQir~!XhAom*gFQ&MD}FW@Pr3mF06>e58IM|@(-~} zl%|7qsy$#=;?pa)Tuz%fX9wk8SH#G~t`7gH5kh{2-5~#bB^dxLjsBQ0p~?QLU;VN@ zF6d^!3Q>1ZE9sjR*8^!?p3bw4h|EhQ;_FZt-P@yq=S5Ow_+beU zzNj9bRR6yyoqyv+ew$~`hx1%4pBEfbfqx-<2_C|a9`}@~LZ5_F(#i`D&JU6Y&|UV> zKRiq*frcs=)ZNHA!Ref)Qi8Sk>NTONO_wa_KURr%dHLR}l^k@M;gw1?c$vZ3(>+wh z|Kk4>`Ig?ZOL5%zbB_GjzUXg&dzHj5I>bJ660L!uXW>uWmGttm@1p`ln555NB_~Zj?M8*Z0ad;SpF(zbunaSIq9gpQ_ z%W6)(<)fO?Zq3=uSzM;Pt{MypkQ*9V#vRI9Q5)w>+{pye>s1``O0Je&D;O)JKy_B z<)r>My^Fhcovnd3Oks47(ITw>=z(_ok7h)QdCiS1rc6fgs*)Fey7miY;Y=kyTg@bE zpv*((_RhN`q1S3~TQ5cODsk>FR=nbVZ0ZKXgsqTRjI9_>KrVtJ;Lj&8)fFpVf%S+U z722DC&IA9xO8cq}X|V>6jMstjK}6togw*B`zq(5RZ|(z~Ce8S^*%Zq;-N zOl~Cvb$k1JRoCu`5D5Jee7PCD%} ztKMEW)ReU|sZWMI=gOr)*Hb-ErE70zC$U4SA@v8dp_gEEK(VexI0 z1%zkj*C%dTR~Pcu->%&Vp@z9yjNVH_k3?}_c-#+wABH)ipb?7t*m#RCq#IU1uNR`r z`hczjc4)O>(2`bY%dEwD$SLYY^7x#P4>Z6gfEjw3^2yW>e+85%NN`Zj0-+PIFlw*tI{iQ^dBi zx|sKU#8^V>AyuotWk1HDzDZuY{nu49AEcw8!YN@E@hZHUxqhe(aq6VX;fw24U3<0Z z$5Hh5XDt}Rj7;*1nVELn@777Xq`}Lgx2^GZ6FH@b9jg2``vX7eR@$g7Gu2um1LgLf zZ%gAp?9e{L2liMz`=(a}mpz~mUr?t=57_AAYH*ZM4>e316fD55JhMDEMu+%WZK}cz z_e9W)BZ^J!F7%fm(K{a=6) zhmq1urR$~c8rCJN0a%GKz0zy`K1TUX%2bc7qU~DB(YppZL`Idm$gjcpXQv0 zT6b-<{I_`o!6O7^OImfI_0)m;0J_P4qrWHo^6pjYY7~xt}BZs$c!riVius z(Bm-sMyX;wVqJH0&_{z9|37pHquaS{WoZT!TF+Cl;^HojQ(6O0t3 z!4dhjs}+ZXE}22;GsCeNN>DcoM_+kUsGht7wOE}bb%+u0NT2IHz1-M!>0FlfzG-pD zr-(D2cog(MvM;WCVVVt+B!bmmL>?*bkCJ&_+6*Ngu=?cN7h>tv#IX z@Kqag0=7D&exLD+*$0?ffUI8 z?nuCU75O)4s*te5?P9omCUo^@@knfMG+rfqS7yf)Ktr=Nld#Y;JT}sAQOd#LY`ZSq&!B4s#ulnA4vUiL1W* zv2V0^@WKT#WjoAiQ3f8cXGU)`>){l5!@vI=txbGY3jcd!S86p*Gh>rqqA`&JYha!1 zOK1!14L8w1q(`CBB=U1c8kJ{`EvJ$<+)u|YD%Ocmy3kGa2gAUOZaxHPu7+;3tmdw| z2%S5D8ElSv!I;Y{Qna*`n&KN|g~!V&BpN$4NHMKRn0eOt^$T_9b(flE$IiBR0B;&h!cXX@=#~E-dp7_< zOz3%Xp*^gJ&AzZ@pO3r3d~H1Kd*X*vDerk!8fj#d{^iizilWwZaf3I;-9lYNX?pu_GIFv<$2q*}^$-l_@=@l@s}rm~Mq$<}P2)6g)@=4;jodG&v(>4}EU4 zyY|C#POm>>2zmp!C8obxtBcaG0U4*5UWSH}3yClo!Bs#LY6 zR5mJc`_VXn~2k5e9}blCS}OCsBD z4D4!E$Z8Z2I3fMi&`0LgL+ZH z0F%(gwpUtU-W^%R$VsU_&}rZt=&e8?qSs&s`}-Gn*<`R?k>xl^T`G$i+O8f8PF&uN z&lyvlDIE7+OfY(uQ!4&49rKZTJ*ewG<<44pV%l;+mK&AZs@EUrW1a(}zow4S4PI24 zx{JbVACNsZ^_^8vBt@CaWb6%zib+a5m##fiNWj;Od?wmU%v$lBoKux_=jp^Z;#5_( z{WvmmI(nlyc=@7{N1M0s4L*!OL22I7!!)@&(Q*bYF__Q?%fFFb{O)~-f2@n2_QF3-eepcN;iXZqvyat1rnlBR& zxq7K2aK5RF)|kc>w&_A$B6Sl_u*@h>{OYbYroKi}-}gHLN}gASPy=6w|CD6o#TCvK zS=x1F>F}}3LUbdWsYB}K0+fE$6Th!!>0v=P0zw};1pV1;7b6GhQ-$h}0&O(BTrI1Y z4hay`cdVQ}bkold1>Gw4h{64OdW^5D&D&f#CQkJU!J9uaVfnexE+g+0{8rA}gxy<@ zsoJtpyyvLf`V*@?)dJR`#~0T*Lx?q3Y2SFh{tB@%QmsNcJ4dWwUD@k>b}{l8s7~1% z`D|#d;DTDw!H7V)m4neb9D-0u9rJPYCtvwfRr^%Z*zO|jDl zM8nIEX&N(}`5YoXEGf^56H~nn=ZasO{;nSztPE@v{;&)#StjTK-^V2`GM&CT_Eujl zh@QkU>eFaAYA47{AoB*!fpmBJ#9+=sf~4BNp6H3xta;dEA=}UVD|AFg1=D6p$?zPVKInPy-%d$tP`u>YEK}$cz&KfVHln}-$ffD35aH=-O|p;V}3Ty$~ci`$T!T1 z_Uc>R6i_~l#PBA$9lHl(2cmiFnGfDip!zB5QDgSZ@p}XH=33+QjznHBjQM1 z+tEEWDY!`Z%Z<4h0-}Q0;-Rx;sKJxLof*0c(b+Gs-iamWfQfUZ1)ERtm!L+gLk1!C zrEa1CZ~P;eBJWxsxv8gSnMyfg^RRap2&UxzBuVycjPH)V;#c6RuK-Bu=l)q4{HD?q zkZhAdD$BRiWV=MDIg*|(8uAMrhiQqC^KYqeCwW%#rRAfTvI5=RVRr3f_FNSWD3uCV zTX`uc`hyj{o~xPiBKvZkQSh@t1`6uTI3TM5ypsW`;`J3cl&q=nv&g-Jw>T;NU8Oi- zAMeK2M9HGErGr7e6iE=kS^;43G%H_J3`lR!Gii zW9`zOsDY>`z6WZhPj=3vF@n`!#g)>*ZpOz8imrn}*&+z1Geb{F`E)7DWqZ*{wGPHI z?hq;t-7JoN`z%Vtp(;8_8)8O4HpG#Tphukz6Hd;yE0L}?$aT@0$1o8>iul^(k$!Ox z*JMTJ)kYm%eQ?RXzI3>~T3XZdHGw(5EgjuQtH3)FXNOCdC#}fXa*acPX5sWibxjCz z#_k}oTqz!t;auoQS5ZY}fA-lY{c8I0+FLtC@`wY1y!vG~_xeAo|cr;onK=W6>+we0PjZLL<6cSw{UU!CSMx%}E{)=3;Bi#xI}0T`@}%_Sb6 z@)e!lks)TP~3DS+t{|x?E|Pww4YW)qY|tslrLNfiTZKOd;&w3 zzYpI|Osd!N>yc_7vwa9nx2WMR_l)6yA_scF|7b&{#3T&7E^%Ln`g8~iFI z-|Z1+`Uy{D?PWW|54e6}QeU^27jCH&iW4WSIpPtsO(ci6pz>Tq)j8cLEMs0X9C66%X+>&D%^Vh_Pi3=H>AM5kmT)y4;SH*#^Syg6FF zM^kcMJZX$treYsNu`L<3ivHmQUOy9}M?Q%FfBsm1R%X!w{JlKr8A3 zxb@V#awaKza`Ld>9JPQww2=5kKQAhqFQyb^T9d|L?&|VtD|an@EnZGq+KY zBpIQ8m=Hh-=%5uVd!0Y~0N5GnDd;p0?dt`y?A0!t`ne8BgrQiMlJs{oWB2=#WWJIG zUTaXhi2FkCIb6ZTX4?2h{cjtbGBY9MW6G9J8YwLh1UgB@l;Xr1)VXLH!j~iks)SK~ zmc_%S*{sdtM3R)vPx3qx{47^2R8E(X!36D^FtRdfd`-NjcQ*C_d269wy}m?!_y&#` zHJ_y!psDtSa-GRbfgazOZtdw)-YPR?4VA8>^(Z=~B*ijJ9Q<0ahKsuMC-2TUbB;=O zu{AO`(t4~mPjk44!|N=1%r}nu&@UWwEKX8fz_Onas$DT`2ek(QjFiQYl+S3 zx>cBrN$=zLx|fv^}BtCpRslC{_BIEmcJs#;3Tgyq%)b& zqD#p6kvGV-1&CbL?Ha z9tRN^lR3l$S5`%pSu5U}pGr?DzPE}J5943Wn^|a;*^bc5b$Sv0YH+ulvec0zS~5Y? z%&&Dp#XB%#_(R%C7SoFuW826tK^sXgY+|pTwMnQXPFRV(Bp~OrBVy&F^y~ih5ib6& zmp`{n{4?#7cBrsvrAK#_p5V+akrsO58;)Vs40;Oxm1?d%xK1 z!f^P^owffqp~*;xJ9;;x#q7UxK3!iuJmw2Cz+ZvGzV8-YW1&?KmYZ6vTkhCY|9@eb z=uS2Ffy`GA^FB?kUt;AY`~me3#=qu<;uRPV{rPCC_g@gy|1Ss%&>B7E=TJI=x*){5qQr9=@zLAlCpOXG&DVNN=#Z7qlD=S*CtTrZ1 z1Q?sXDDh}&5t?x>a~zT1qZ+JwJ4=kCLQp;`Ou0@SYcSZJLKr-m7jk4gh|dNkB2T$ z2X$+_?xE3jf6;Y{7Bf!QkATo9Z_0<)&B?STXxuoSU;e$W7IG9*=-#G^7>7kqez{Y* zWP1oS@oJQJPR*exG-A`7fcnrJErz6T>%~um(O3UT5bi(w{MF~TpW_@}^`I3dB5ykq z`*r0A+Ay(vitFXai`igdflWk-!%eh&ES|_jEb|g6jcem=g?S2_XT(%s|0$2u{@&-8 zC}8)MZNuO>P(;b1Cctlpdk-1CRbFbqlO+-TJ6lkQLGgui+(x$IQY4cJPT6y}Y$ zP>|OojMK&wpI0Z@X`n$=!9u#;yjOat_C95U{wZ+LD>Ej-@nAna;f4!|Twa3{vb_}O z-fyCVV8S!+rjgF+wJ}fn)O(w?r~-S0Zp_nM1caA@vri5Hqb=pY5kRi7ADR1201lDl z8q{VqaQpYQGkCJ9P6P(M+0#1idqt-XxfQ+f*ob>!VH-G1ghPlkm?3#$UtKWI zh|Dftkb3t?px_&6Ou$X7HB_VhLi{YpSdymd?$xaJ9qQ-5l`nb+2YP4O(dAJN!j_Ua zq<-t5lau4Y!T(RSvtShx`7z1c&1WM~V?c%N9pn>=_a=g`P*#8BanGLxO8?^^E2Fc~ zqrZa>1EaqKZL#K<67+pE7qQHRk8x%04U1TmBYLOpZaA@V%Rhr6AXNsEYHSg979e29`l$39g|ckKzQU5{uzUif9S-+>@$k6g{lt zS!?67`=V!%=mLC9SwSod6;_s?3(?A88J>;@!QmG=E%Jwz&v_oj5r~U#!HH1U;2+M6 z-c;!1(xTY=Tu%$~iT22Efl5Ebb*?c))+HHcePs2>iBr&oP>Af zPxQ5vOKpU%B-qoJB~>5D;QSQXRZO*Q9R_htqh6D5{M5O@6E(u;QOl1KsM6&V6K5?7 zG-bs6>=h%TJy_*f>qRv2+=9f{8fx{dZ6gpVUom!Qvf4yN-MjxjS`K49eTn#G?-oDf zj8ozroFgmr6VJ7Fz8#Sg^)n&2dd)#uM@@u5tpCZz`g2RgNFY5{R_T)W^i(&8?vXVA zPm3hwl>s@U0PytVbnP#5y7g-f%sG2E+Gf<%FtLwZyc?kGCcTLVVugGUUrr+p8K;u8 z3p6LT0FC^f(B&Mloh-08V(B>A<}7>aX7SQyr4I(u#g6b;oH1JWEWMeRyN53J?=*`X zUoCcrC@cyl9-0($p|&cF)u}J!w_z!aW#);q{8@P(v#hSbaQoy*Oa@0`j6(En>p1rfKhwP`qamv6{^3FVn4E9vzqa~`&LMa3`Jtwj~o z_~byaNe^^b1#(r`SbLyZ?zSnPuAPzzGLLO`Vw1`g`To-}{K?thV)Tr7U&-i53C#}? zALmHa?0BZIAAm;bX+A_GWTy_hjO0_RZG<(r^|%tJuzp4i;RgKQj|s>9-vVgezXZ^9 zMK;C$cJ%Ki{Z}5P|9?#_AI2(XNcQvoOZ;4IUXvlvJ^m9@<#~}&l=Y}59dwHkWq z=lh(3!w$LQx{w4f&I&{4SD;prNALXcfe>r0ScZzvQDg=qKlOt%VRx_6|9v^+-^0Lg zo(r}AEt_Jm2coZsq`lr|M1h7$UU_Vw$#2_uN!l*!f$$Vm$~zS^+kH(ow^LQ2Rd{J- z`L|IoY9(HHFT6c7HqD7!UT`ngy5|F9NoH0p1GnA~o1BN)eSC(`T)6oVf0-px{aoeir!9<)9ixxf!+HtiBj+6pd`#sZ|!M`_-c@P^4U zdR#nf@qBZNQx&V0_QQ_x3ZI2gL|J#1zu;i`v`;(pbMtcj4Cl708??+S|(!1r+I~6g8gJDI8HwmPvAq=4?7TpcG!E zy0lR=7G{jDG`)=e76>*61&)6Ya~qr#k&kkuU{mpfsG+atnxZ6@(O7oHriltHEcDz_vv^bAB_Gt&Bcp%(c;&4^EYHB>*a%&A-dA}^EYLN_`vHvh>;-ruw&C2&v~}s%^mh zN%@?n{ohFAG4}Ba@hIp?*xw_z5T|}Hi%PKQ*!C5>x(SP22DcQuu=8*74s;A+f@*GI z@h%;6FeF=!1LrnuQn$eM_1EGahOH8GQ**KlRGj>f{Tytw_zF>r7&iwi_yklY_v;J3 zY)aUDQaG60);GV(aOIDe{wDxy_&HlkZSekgnunL;C>E#zJ`W3NU z$IMyHFxqTTs$)Z7<8J3ok+8vsc>nPS=%@3&qjn!fm6K<-hFh{B!wE&M<*dFVBQjpP znTG_fL#k{7ffUQn=7B@CWoSj?*oFX+ZXqVCyV zdd*mWJcKsQm#p5)$fn5DjIGx+f>Ya)+zuFHg%+S_*m18if(F%cbxwYeJ1}$g;#T!z z%sC`^kzb-yu3t>fXo`GCwovnB|4uHBnzhx36|eyp_Lr}tBz*#UNoqa2Zr*(4xxB*9 zWf6(N`dfuw9{MyV)D>Ux{2#tw;kKw+I3G$BeblylC()!MKT-0 z@2F3Q7#Fi&Gfw~PynC+DGwbC?-V@$)@N(ofA_RCnvR=1J7xv#E+h3l|7f@>BmDHKx zb6!tyM?wQoMP{-{GqazNrhqAH+BT;L7zQ>ewm61-EY3FT4P}Y@ZQZ^oGZvj=g!4C) zfVl3Jm37Xf@@+-0*^2Zg{K&yecIgZKwjFW#trec7`Fa4!?GoU39Uq2dTvb%^OyhH6 zn3szFTr>zh`!Z6FXulbftHCn;+{e1D@GAHLc1%7K1oL#Jb2HPFrim4;52|rGSRB_>oo9S{$kw#a$R_a>#?5sl!)7}R$2)XL>roYLQ!_}4+f9<d%eWi}SdwC|UguB;o)pEYu3Sh9QsxcbxsVaoC>*0b11 z?_#I)isOk`E(wfG;Z>RSKqeKa=HE%2Y(-my5R})MaJW`>^er+G+9MX&t_qym33R1xcb)&Do9vPd;wZj!54--`D)=C|(dEiwPfWFjZL zEvyRLJW2mLKuoN9VdvJaf8R6wP`lPdRxhH=qbbjh&7HlldN@~QA<}xGemxlpVT$ov zzpqjK(I~{tZvI5*Fcj+_3|indXn{gQM}dk_d)M*@z~A!6jvgJ+N&@uP?d6F)^7598pbTlzVdg{4-9b< z7ouK1$t%uq1xgV>AJ$oAuj^-&1w$^&Zn^tJ^?zImem+kKKF6G!Qb3%MxT=M`^m`Jx zJNX}uC(~ee8#!TkPl-SKvP5jS;~fEM zXg4Fp%8A+I+ofGU=>W#@XH+)r`Nelt!!L89Z|s8n=T=nj<0c=vH#GYcPDD>OcW%C% zBP;0qHOUZEif{mPCoS8Fw4oK3ibNCV0VCiF^)-baQ1?Np!r^^l)pRo>sp<26;|6;V zB)`z*T`5CBJ*!3}S4`>WuB;X8#@NP4#dy_q3^jBu45%<~ff=94A@W@-x7B7Ejfnlt z7jg+V<%;+x_3zqrIv?Abp5}j#nh-ayAGcO()Up2c0+TTVRQCe>Wyn>WVQ-8h=m1qo zC0n*Y%_@gzaHy~>&$X))6AT=d`x1IhJsnYMZ>4qka$yXw;yUNk%gDja{-e@?&8$ZGcq!|2A8#9oI!OxPDx z_2IaA@q^(TtzTEheMFdG5VvEwm!`fYvXAkodba>cjzcs%lNUVNen!X2H z#ynOUk@$LMsNi}7d(m`wTG>K0zkc`q)8xO`6@=9 zg0ms&?Nh$_rYOk3Qw-x6bu1chkX?qljro^f>J`)JxcK*!BpsSYN<8)k4y1m)z>+LF zg}l002~Vefzo3Z7KQCAY_4s`WkIj(;V9)eNdeVUzj@L2X2}co40*TjAj!&fVSx^c` zi{$1uR*ww}T*!yF>_e%eky2$+^lVK^qyh^>jSHxvQYIn}ii*RP#`)KAT}w)6{D#lx`%%Demgd|K2s))q~bU$Z1mk zhG}707t=i*^iDc2xb3nEka_b&|3`IL)3`}djpAd}D937})3z#~K{Qs=3c zZ(mBR<@Kj?)@u}ce-mdeaDsUCjJX$s|Xhv3jKvW!>b2veFU!>BG0G0kBq%fIYX6aDcgqlrj$&} zlz=^7;I!Klo@UZSxU!Z;^lOy%CL;3wgZb3)1<_fkPVHXPKBmMVni&6*CJYU-D$&2b zBz)(a>!*eB*^fM0k)-%=FkPnvU97(!b0JU`-d4r>sQ*aZ91X;PV4=|h{a^ou_|h9T z2*vydqPlTYAUb$dHF3&U+agZOKiy`ppKG!t)H8HV-Xd(B4i_q&NYZtdKZ{;%D*rOy zdEyr3dcb%9$?i!I(nk7Y=}ZfR$v}z+vuDQos}s(U!AYUa^s|VT z1U+82ThsH8>*=$nHbKvVFSjWF;P>E`Z@aw3?>=Ks`Hl0i0Rc70XQ<~-Wck5dAvrsR z8*|jqN5vblIpjlVQmH&9e2_Qa&C{)_YQU4;6S$64r59rGJ~0dyW)p$hDGqwuD&_Dt zG$lGPZN3h-*qcLCn9cXNiTQ)Z(i{wp5l|QF9ql@2I_uX&WmvsrHghu_sxa02 z<6vKXV2~%%fz$J9Ek|_gRBTVr#nXMfSMzOkxMLbw$h_kEqfXR~*B0|h#lE=`O!dM$ zZmzy$8C@m`o>5Et6fTj-C(Ps%M7j%MV<#!x)ug}1d*P<37$LuzX}Vea4%p3;83B3E zowu4gR4Mvl)d1~^^lWNDX(53LCtYueY&z67al-l@4;2 z`Q-~9-8FiidEpSsCFQ!T{Du#sbMkwDn7CT@o}qq9^P%@AnOP;bHN88fLGMO7}IbwlBGgfEfK*1~*k5jw3- zMBL^1R3MS4i2abRY_;32QV)kUv!wYl+!m9Ik6%QuR8zA-!stCVT5q=UcA&3D>w=k; z#yKj(cB{Jyh>LewF^@Dl`Gy5wBk<6v8%Z8ZD>yM_yeVE}WyUUB9HdV>yN);fiNuPr zde7g6h_hEG!Yo9U|(QK zI*@>0kqI52j(vVLu_iZBxi)-YNX4FG7Oy}``0FDb&o<`WLt>}Sl?3eDNadzlid8rS zg`q8`Su&!q?PX9{?Do<>%#^w-ad9&-8DYlWh%X51<%FbMWvry09}x@|upsKxMLGSy z#pG|xTK%c*jt9vldGP4^6DKCVXL|Ywz6D?vlWQekvMHl+uMumST?K|w=;#Q)>wdLa zWBte8=Nl2k$a;i~{^^-Q4!I;zVd6XN=db`d7@1R`6Y>FU@jZ)b?f16d5ha#HT)8y} z#9yfSJLK>JTu(I6El9AMF zzeHlF#c7T8Y}9w;7oApdRgKu&)zBbOxr+nK*`4&Hp^W08H|$!Yf~HnfL5Bpj>m*AN zliXU>-D?#?Z2nkRKTyYmbyE*M1?bk_UFOF&y3|H{PlX4v>)~?4L}2xtbwU82r|E4IuB88 zW&hT4Y&m+fUOT+~@cc?fSDba&zRD$9wx@zKS&nC>iS<(~x&cN}-gu=?)bN%M6|G~A zB%+Liq&_g#v?XjYf++zDT`=-*KTZiV-N>6eyV_QrRO53 z^$F=H;~#};htAr+Fov-eO5|*)`)G`Q{-zWOLwc{)D|Q;L!#%u}EhEGdRY{{O3!kXp zjIyjZs~*oujoX@2T;wgT$9`Y)`Ft;+=0+ixXDN(R?nM{Ar8if1URW+)lbYgTObL?O z8~C`oL6IC~STxTMXKOdLZSq~k#k_IWhqpU>i?n{57}ripjynAo#~aG!y8A``!PRtr zX`+e*)hFWd8}P~;s{!3{d+a#lSLGr-;yvR9SKy8Ehv2tApo+1pH&_umFlMrx^E;&u z8P6W8rCdO$3hXsh>6C&rI9wt!c2zuWd9+G_BN?Ga2l5!1xyQw1X_s`F^|Zi<}c$V+thb_!Pmlu{-pzR0gUjHW&&7 zLVdmk5X(eOHRi>`1?Lb`9uVZE7uutt^Jk!VLo)-%FZ4#6(TBlWq=ITpiG#wjy{V-_pNr?c)b{R!q_Leb zer>PR8Klzo?SGJ?|L)pMJlD=$qfKEPS2)g$gW{*gPiVV)9_pf%2bSF}I4GsLy_dDj zQWqJ2Qq1!85vh!p#jKy)TUGpCMiJs~X{BLXk{x#R#62QP#XcE}?~2%&b56URdwRla zW%G+eEYDjoyO*?5)71WonJ&vWFyBe(f%I4Wm~L>MZ2>oHVy53HWSMne2|WNdbp(k$496I_$96<;1E2qDfie@G^&|3l<~9| zR28uK?2AScoqB_3Ch*51>iV5S5Z8S9+V@=sKn(a;8* z9qE&;^dGwPY6;^!vEwTx3a*BBMeNQZ8AEIhZTCqfDwuG)zM@9lE9prdO1|YE8-rKq zJ?DFCD_+v=_`_xwb}mU4KhWfdXqa}3V%|Tgyymo{ZW2({contributors:o.a})},t=(n(348),n(14)),s=Object(t.a)(i,(function(){var a=this,e=a._self._c;return e("div",a._l(a.contributors,(function(n,r){return e("a",{staticClass:"contributor",style:"background-position: "+100*r/(a.contributors.length-1)+"% 0",attrs:{href:"https://github.com/"+n}},[a._v("\n "+a._s(n)+"\n ")])})),0)}),[],!1,null,"074475b8",null);e.default=s.exports}}]); \ No newline at end of file diff --git a/assets/js/56.4842697a.js b/assets/js/56.4842697a.js new file mode 100644 index 000000000..8fc5adf80 --- /dev/null +++ b/assets/js/56.4842697a.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[56],{405:function(t,s,a){"use strict";a.r(s);var n=a(14),e=Object(n.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"managing-schemas"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#managing-schemas"}},[t._v("#")]),t._v(" Managing schemas")]),t._v(" "),s("p"),s("div",{staticClass:"table-of-contents"},[s("ul",[s("li",[s("a",{attrs:{href:"#re-using-validation-functions"}},[t._v("Re-using validation functions")])]),s("li",[s("a",{attrs:{href:"#standalone-validation-code"}},[t._v("Standalone validation code")])]),s("li",[s("a",{attrs:{href:"#compiling-during-initialization"}},[t._v("Compiling during initialization")])]),s("li",[s("a",{attrs:{href:"#using-ajv-instance-cache"}},[t._v("Using Ajv instance cache")]),s("ul",[s("li",[s("a",{attrs:{href:"#cache-key-schema-vs-key-vs-id"}},[t._v("Cache key: schema vs key vs $id")])]),s("li",[s("a",{attrs:{href:"#pre-adding-all-schemas-vs-adding-on-demand"}},[t._v("Pre-adding all schemas vs adding on demand")])]),s("li",[s("a",{attrs:{href:"#asynchronous-schema-loading"}},[t._v("Asynchronous schema loading")])])])]),s("li",[s("a",{attrs:{href:"#caching-schemas-in-your-code"}},[t._v("Caching schemas in your code")])])])]),s("p"),t._v(" "),s("h2",{attrs:{id:"re-using-validation-functions"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#re-using-validation-functions"}},[t._v("#")]),t._v(" Re-using validation functions")]),t._v(" "),s("p",[t._v("Ajv validation model is optimized for server side execution, when schema compilation happens only once and validation happens multiple times - this has a substantial performance benefit comparing with validators that interpret the schema in the process of validation.")]),t._v(" "),s("p",[t._v("Transition from template-based code generation in Ajv v6 to the tree-based in v7 brought:")]),t._v(" "),s("ul",[s("li",[t._v("type-level safety against code injection via untrusted schemas")]),t._v(" "),s("li",[t._v("more efficient validation code (via "),s("RouterLink",{attrs:{to:"/codegen.html#code-optimization"}},[t._v("tree optimizations")]),t._v(")")],1),t._v(" "),s("li",[t._v("smaller memory footprint of compiled functions (schemas are no longer serialized)")]),t._v(" "),s("li",[t._v("smaller bundle size")]),t._v(" "),s("li",[t._v("more maintainable code")])]),t._v(" "),s("p",[t._v("These improvements cost slower schema compilation, and increased chance of re-compilation in case you pass a different schema object (see "),s("a",{attrs:{href:"https://github.com/ajv-validator/ajv/issues/1413",target:"_blank",rel:"noopener noreferrer"}},[t._v("#1413"),s("OutboundLink")],1),t._v("), so it is very important to manage schemas correctly, so they are only compiled once.")]),t._v(" "),s("p",[t._v("There are several approaches to manage compiled schemas.")]),t._v(" "),s("h2",{attrs:{id:"standalone-validation-code"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#standalone-validation-code"}},[t._v("#")]),t._v(" Standalone validation code")]),t._v(" "),s("p",[t._v("The motivation to pre-compile schemas:")]),t._v(" "),s("ul",[s("li",[t._v("faster startup times")]),t._v(" "),s("li",[t._v("lower memory footprint/bundle size")]),t._v(" "),s("li",[t._v("compatible with strict content security policies")]),t._v(" "),s("li",[t._v("almost no risk to compile schema more than once")]),t._v(" "),s("li",[t._v("better for short-lived environments")])]),t._v(" "),s("p",[t._v("See "),s("a",{attrs:{href:"../standalone"}},[t._v("Standalone validation code")]),t._v(" for the details.")]),t._v(" "),s("p",[t._v("There are scenarios when it can be not possible or difficult:")]),t._v(" "),s("ul",[s("li",[t._v("dynamic or user-provided schemas - while you can do caching, it can be either difficult to implement or inefficient.")]),t._v(" "),s("li",[t._v("user-defined keywords that use closures that are difficult to serialize as code.")])]),t._v(" "),s("h2",{attrs:{id:"compiling-during-initialization"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#compiling-during-initialization"}},[t._v("#")]),t._v(" Compiling during initialization")]),t._v(" "),s("p",[t._v("The simplest approach is to compile all your schemas when the application starts, outside of the code that handles requests. It can be done simply in the module scope:")]),t._v(" "),s("code-group",[s("code-block",{attrs:{title:"JavaScript"}},[s("div",{staticClass:"language-javascript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-javascript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" Ajv "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("require")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ajv"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("default\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" schema_user "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("require")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./schema_user.json"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" ajv "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Ajv")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" validate_user "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" ajv"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("compile")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("schema_user"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\n\n\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// this is just some abstract API framework")]),t._v("\napp"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("post")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/user"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("cxt")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("validate_user")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("cxt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("body"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// create user")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// report error")]),t._v("\n cxt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("status")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("400")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])])]),t._v(" "),s("code-block",{attrs:{title:"TypeScript"}},[s("div",{staticClass:"language-javascript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-javascript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" Ajv "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ajv"')]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" schema_user "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./schema_user.json"')]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" ajv "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Ajv")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" validate_user "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" ajv"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("compile"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("User"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("schema_user"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("interface")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("User")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("username")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" string\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// this is just some abstract API framework")]),t._v("\napp"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("post")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/user"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("cxt")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("validate_user")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("cxt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("body"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// create user")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// report error")]),t._v("\n cxt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("status")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("400")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])])])],1),t._v(" "),s("div",{staticClass:"custom-block warning"},[s("p",{staticClass:"custom-block-title"},[t._v("Use single Ajv instance")]),t._v(" "),s("p",[t._v("It recommended to use a single Ajv instance for the whole application, so if you use validation in more than one module, you should:")]),t._v(" "),s("ul",[s("li",[t._v("require Ajv in a separate module responsible for validation")]),t._v(" "),s("li",[t._v("compile all validators there")]),t._v(" "),s("li",[t._v("export them to be used in multiple modules of your application")])])]),t._v(" "),s("h2",{attrs:{id:"using-ajv-instance-cache"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#using-ajv-instance-cache"}},[t._v("#")]),t._v(" Using Ajv instance cache")]),t._v(" "),s("p",[t._v("Another, more effective approach, is to use Ajv instance cache to have all compiled validators available anywhere in your application from a single import.")]),t._v(" "),s("p",[t._v("In this case you would have a separate module where you instantiate Ajv and use this instance in your application.")]),t._v(" "),s("p",[t._v("You can load all schemas and add them to Ajv instance in a single "),s("code",[t._v("validation")]),t._v(" module:")]),t._v(" "),s("code-group",[s("code-block",{attrs:{title:"validation.js"}},[s("div",{staticClass:"language-javascript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-javascript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" Ajv "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("require")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ajv"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" schema_user "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("require")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./schema_user.json"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" schema_document "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("require")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./schema_document.json"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" ajv "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" exports"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ajv "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Ajv")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\najv"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("addSchema")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("schema_user"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"user"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\najv"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("addSchema")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("schema_document"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"document"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])])]),t._v(" "),s("code-block",{attrs:{title:"validation.ts"}},[s("div",{staticClass:"language-typescript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-typescript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" Ajv "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ajv"')]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" schema_user "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./schema_user.json"')]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" schema_document "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./schema_document.json"')]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" ajv "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Ajv")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\najv"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("addSchema")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("schema_user"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"user"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\najv"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("addSchema")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("schema_document"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"document"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])])])],1),t._v(" "),s("p",[t._v("And then you can import Ajv instance and access any schema in any application module, for example "),s("code",[t._v("user")]),t._v(" module:")]),t._v(" "),s("code-group",[s("code-block",{attrs:{title:"user.js"}},[s("div",{staticClass:"language-javascript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-javascript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("ajv"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("require")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./validation"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\n\n\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// this is just some abstract API framework")]),t._v("\napp"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("post")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/user"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("cxt")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" validate "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" ajv"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getSchema")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"user"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("validate")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("cxt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("body"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// create user")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// report error")]),t._v("\n cxt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("status")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("400")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])])]),t._v(" "),s("code-block",{attrs:{title:"users.ts"}},[s("div",{staticClass:"language-javascript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-javascript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" ajv "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./validation"')]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("interface")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("User")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("username")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" string\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// this is just some abstract API framework")]),t._v("\napp"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("post")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/user"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("cxt")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" validate "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" ajv"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getSchema"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("User"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"user"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("validate")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("cxt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("body"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// create user")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// report error")]),t._v("\n cxt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("status")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("400")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])])])],1),t._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[t._v("On-demand vs preliminary compilation")]),t._v(" "),s("p",[t._v("In the example above, schema compilation happens only once, on the first API call, not at the application start-up time. It means that the application would start a bit faster, but the first API call would be a bit slower. If this is undesirable, you could, for example, call "),s("code",[t._v("getSchema")]),t._v(" for all added schemas after they are added, then when "),s("code",[t._v("getSchema")]),t._v(" is called inside route handler it would simply get compiled validation function from the instance cache.")])]),t._v(" "),s("h3",{attrs:{id:"cache-key-schema-vs-key-vs-id"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#cache-key-schema-vs-key-vs-id"}},[t._v("#")]),t._v(" Cache key: schema vs key vs $id")]),t._v(" "),s("p",[t._v("In the example above, the key passed to the "),s("code",[t._v("addSchema")]),t._v(" method was used to retrieve schemas from the cache. Other options are:")]),t._v(" "),s("ul",[s("li",[t._v("use schema root $id attribute. While it usually looks like URI, it does not mean Ajv downloads it from this URI - this is simply $id used to identify and access the schema. You can though configure Ajv to download schemas on demand - see "),s("a",{attrs:{href:"#asynchronous-schema-loading"}},[t._v("Asynchronous schema loading")])]),t._v(" "),s("li",[t._v("use schema object itself as a key to the cache (it is possible, because Ajv uses Map). This approach is not recommended, because it would only work if you pass the same instance of the schema object that was passed to "),s("code",[t._v("addSchema")]),t._v(" method - it is easy to make a mistake that would result in schema being compiled every time it is used.")])]),t._v(" "),s("h3",{attrs:{id:"pre-adding-all-schemas-vs-adding-on-demand"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#pre-adding-all-schemas-vs-adding-on-demand"}},[t._v("#")]),t._v(" Pre-adding all schemas vs adding on demand")]),t._v(" "),s("p",[t._v("In the example above all schemas were added in advance. It is also possible, to add schemas as they are used - it can be helpful if there are many schemas. In this case, you need to check first whether the schema is already added by calling "),s("code",[t._v("getSchema")]),t._v(" method - it would return "),s("code",[t._v("undefined")]),t._v(" if not:")]),t._v(" "),s("div",{staticClass:"language-javascript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-javascript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" schema_user "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("require")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./schema_user.json"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" validate "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" ajv"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getSchema")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"user"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!")]),t._v("validate"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n ajv"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("addSchema")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("schema_user"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"user"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n validate "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" ajv"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getSchema")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"user"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("If your schema has "),s("code",[t._v("$id")]),t._v(" attribute, for example:")]),t._v(" "),s("code-group",[s("code-block",{attrs:{title:"schema_user.json"}},[s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"$id"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"https://example.com/user.json"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"type"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"object"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"properties"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"username"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"type"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"string"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n required"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"username"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])])],1),t._v(" "),s("p",[t._v("then the above logic can be simpler:")]),t._v(" "),s("div",{staticClass:"language-javascript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-javascript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" schema_user "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("require")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./schema_user.json"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" validate "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" ajv"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getSchema")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"https://example.com/user.json"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" ajv"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("compile")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("schema_user"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("p",[t._v("The above is possible because when the schema has "),s("code",[t._v("$id")]),t._v(" attribute "),s("code",[t._v("compile")]),t._v(" method both compiles the schema (returning the validation function) and adds it to the Ajv instance cache at the same time.")]),t._v(" "),s("h3",{attrs:{id:"asynchronous-schema-loading"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#asynchronous-schema-loading"}},[t._v("#")]),t._v(" Asynchronous schema loading")]),t._v(" "),s("p",[t._v("There are cases when you need to have a large collection of schemas stored in some database or on the remote server. In this case you are likely to use schema "),s("code",[t._v("$id")]),t._v(" as some resource identifier to retrieve it - either network URI or database ID.")]),t._v(" "),s("p",[t._v("You can use "),s("code",[t._v("compileAsync")]),t._v(" "),s("RouterLink",{attrs:{to:"/guide/api.html#api-compileAsync"}},[t._v("method")]),t._v(" to asynchronously load the schemas as they are compiled, loading the schemas that are referenced from compiled schemas on demand. Ajv itself does not do any IO operations, it uses the function you supply via "),s("code",[t._v("loadSchema")]),t._v(" "),s("RouterLink",{attrs:{to:"/guide/api.html#options"}},[t._v("option")]),t._v(" to load schema from the passed ID. This function should return "),s("code",[t._v("Promise")]),t._v(" that resolves to the schema (you can use async function, as in the example).")],1),t._v(" "),s("p",[t._v("Example:")]),t._v(" "),s("div",{staticClass:"language-javascript extra-class"},[s("pre",{pre:!0,attrs:{class:"language-javascript"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" ajv "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Ajv")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("loadSchema")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" loadSchema"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\najv"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("compileAsync")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("schema"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("then")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("validate")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" valid "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("validate")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// ...")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("loadSchema")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("uri")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" res "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" request"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("json")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("uri"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("res"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("statusCode "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("400")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("throw")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Error")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Loading error: "')]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" res"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("statusCode"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" res"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("body\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("h2",{attrs:{id:"caching-schemas-in-your-code"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#caching-schemas-in-your-code"}},[t._v("#")]),t._v(" Caching schemas in your code")]),t._v(" "),s("p",[t._v("You can maintain cache of compiled schemas in your application independently from Ajv. It can be helpful in cases when you have multiple Ajv instances because, for example:")]),t._v(" "),s("ul",[s("li",[t._v("you need to compile different schemas with different options")]),t._v(" "),s("li",[t._v("you use both JSON Schema and JSON Type Definition schemas in one application")]),t._v(" "),s("li",[t._v("you have $id conflicts between different third party schemas you do not control")])]),t._v(" "),s("p",[t._v("Whatever approach you use, you need to ensure that each schema is compiled only once.")])],1)}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/64.b63ba4c7.js b/assets/js/64.b63ba4c7.js new file mode 100644 index 000000000..c05e39a1c --- /dev/null +++ b/assets/js/64.b63ba4c7.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[64],{414:function(t,a,s){"use strict";s.r(a);var n=s(14),e=Object(n.a)({},(function(){var t=this,a=t._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"user-defined-keywords"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#user-defined-keywords"}},[t._v("#")]),t._v(" User defined keywords")]),t._v(" "),a("p"),a("div",{staticClass:"table-of-contents"},[a("ul",[a("li",[a("a",{attrs:{href:"#common-attributes-of-keyword-definitions"}},[t._v("Common attributes of keyword definitions")]),a("ul",[a("li",[a("a",{attrs:{href:"#define-keyword-with-code-generation-function"}},[t._v("Define keyword with code generation function "),a("Badge",{attrs:{text:"recommended"}})],1)]),a("li",[a("a",{attrs:{href:"#define-keyword-with-validate-function"}},[t._v('Define keyword with "validate" function')])]),a("li",[a("a",{attrs:{href:"#define-keyword-with-compile-function"}},[t._v('Define keyword with "compile" function')])]),a("li",[a("a",{attrs:{href:"#define-keyword-with-macro-function"}},[t._v('Define keyword with "macro" function')])])])]),a("li",[a("a",{attrs:{href:"#schema-compilation-context"}},[t._v("Schema compilation context")])]),a("li",[a("a",{attrs:{href:"#validation-time-variables"}},[t._v("Validation time variables")])]),a("li",[a("a",{attrs:{href:"#reporting-errors"}},[t._v("Reporting errors")])])])]),a("p"),t._v(" "),a("h2",{attrs:{id:"common-attributes-of-keyword-definitions"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#common-attributes-of-keyword-definitions"}},[t._v("#")]),t._v(" Common attributes of keyword definitions")]),t._v(" "),a("p",[t._v("The usual interface to define all keywords has these properties:")]),t._v(" "),a("div",{staticClass:"language-typescript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("interface")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("_KeywordDef")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n keyword"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" JSONType "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" JSONType"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// data type(s) that keyword applies to,")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v('// if defined, it is usually "string", "number", "object" or "array"')]),t._v("\n schemaType"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" JSONType "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" JSONType"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// the allowed type(s) of value that keyword must have in the schema")]),t._v("\n error"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n message"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("cxt"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" KeywordCxt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" Code"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n params"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("cxt"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" KeywordCxt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" Code\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("p",[t._v("Keyword definitions may have additional optional properties - see "),a("a",{attrs:{href:"https://github.com/ajv-validator/ajv/blob/master/lib/types/index.ts",target:"_blank",rel:"noopener noreferrer"}},[t._v("types"),a("OutboundLink")],1),t._v(" and "),a("a",{attrs:{href:"https://github.com/ajv-validator/ajv/blob/master/lib/compile/validate/index.ts",target:"_blank",rel:"noopener noreferrer"}},[t._v("KeywordCxt"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("h3",{attrs:{id:"define-keyword-with-code-generation-function"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#define-keyword-with-code-generation-function"}},[t._v("#")]),t._v(" Define keyword with code generation function "),a("Badge",{attrs:{text:"recommended"}})],1),t._v(" "),a("p",[t._v("Starting from v7 Ajv uses "),a("a",{attrs:{href:"https://github.com/ajv-validator/ajv/blob/master/lib/compile/codegen/index.ts",target:"_blank",rel:"noopener noreferrer"}},[t._v("CodeGen module"),a("OutboundLink")],1),t._v(" for all pre-defined keywords - see "),a("RouterLink",{attrs:{to:"/codegen.html"}},[t._v("codegen.md")]),t._v(" for details.")],1),t._v(" "),a("p",[t._v("This is the best approach for user defined keywords:")]),t._v(" "),a("ul",[a("li",[t._v("safe against code injection")]),t._v(" "),a("li",[t._v("best performance")]),t._v(" "),a("li",[t._v("the precise control over validation process")]),t._v(" "),a("li",[t._v("access to the parent data and the path to the currently validated data")])]),t._v(" "),a("p",[t._v("While Ajv can be safely used with plain JavaScript, it is strongly recommended to use Typescript for user-defined keywords that generate code - the prevention against code injection via untrusted schemas is partially based on the type system, not only on runtime checks.")]),t._v(" "),a("p",[t._v('The usual keyword definition for keywords generating code extends common interface with "code" function:')]),t._v(" "),a("div",{staticClass:"language-typescript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("interface")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CodeKeywordDefinition")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("_KeywordDef")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("code")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("cxt"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" KeywordCxt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ruleType"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// code generation function")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("p",[t._v("Example "),a("code",[t._v("even")]),t._v(" keyword:")]),t._v(" "),a("div",{staticClass:"language-typescript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("_"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" KeywordCxt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" from Ajv\n\najv"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("addKeyword")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n keyword"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"even"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"number"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n schemaType"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"boolean"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// $data: true // to support [$data reference](./guide/combining-schemas.md#data-reference), ...")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("code")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("cxt"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" KeywordCxt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" cxt\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" op "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" schema "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" _"),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("!==")]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" _"),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("===")]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")])]),t._v("\n cxt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("fail")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("_"),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")]),a("span",{pre:!0,attrs:{class:"token interpolation"}},[a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("${")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("}")])]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v(" %2 ")]),a("span",{pre:!0,attrs:{class:"token interpolation"}},[a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("${")]),t._v("op"),a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("}")])]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v(" 0")]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// ... the only code change needed is to use `cxt.fail$data` here")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" schema "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("even"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" validate "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" ajv"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("compile")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("validate")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// true")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("console")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("validate")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// false")]),t._v("\n")])])]),a("p",[t._v("Example "),a("code",[t._v("range")]),t._v(" keyword:")]),t._v(" "),a("div",{staticClass:"language-typescript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("_"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" nil"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" KeywordCxt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" from Ajv\n\najv"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("addKeyword")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n keyword"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"range"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"number"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("code")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("cxt"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" KeywordCxt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" parentSchema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" cxt\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("min"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" max"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" schema\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" eq"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Code "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" parentSchema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("exclusiveRange "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" _"),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" nil\n cxt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("fail")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("_"),a("span",{pre:!0,attrs:{class:"token template-string"}},[a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")]),a("span",{pre:!0,attrs:{class:"token interpolation"}},[a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("${")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("}")])]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v(" <")]),a("span",{pre:!0,attrs:{class:"token interpolation"}},[a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("${")]),t._v("eq"),a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("}")])]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v(" ")]),a("span",{pre:!0,attrs:{class:"token interpolation"}},[a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("${")]),t._v("min"),a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("}")])]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v(" || ")]),a("span",{pre:!0,attrs:{class:"token interpolation"}},[a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("${")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("}")])]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v(" >")]),a("span",{pre:!0,attrs:{class:"token interpolation"}},[a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("${")]),t._v("eq"),a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("}")])]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v(" ")]),a("span",{pre:!0,attrs:{class:"token interpolation"}},[a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("${")]),t._v("max"),a("span",{pre:!0,attrs:{class:"token interpolation-punctuation punctuation"}},[t._v("}")])]),a("span",{pre:!0,attrs:{class:"token template-punctuation string"}},[t._v("`")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n metaSchema"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n type"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"array"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n items"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("type"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"number"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("type"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"number"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n minItems"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n additionalItems"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),a("p",[t._v("You can review pre-defined Ajv keywords in "),a("a",{attrs:{href:"https://github.com/ajv-validator/ajv/blob/master/lib/validation",target:"_blank",rel:"noopener noreferrer"}},[t._v("validation"),a("OutboundLink")],1),t._v(" folder for more advanced examples - it is much easier to define code generation keywords than it was in the previous version of Ajv.")]),t._v(" "),a("p",[t._v("See "),a("a",{attrs:{href:"https://github.com/ajv-validator/ajv/blob/master/lib/compile/validate/index.ts",target:"_blank",rel:"noopener noreferrer"}},[t._v("KeywordCxt"),a("OutboundLink")],1),t._v(" and "),a("a",{attrs:{href:"https://github.com/ajv-validator/ajv/blob/master/lib/compile/index.ts",target:"_blank",rel:"noopener noreferrer"}},[t._v("SchemaCxt"),a("OutboundLink")],1),t._v(" type definitions for more information about properties you can use in your keywords.")]),t._v(" "),a("h3",{attrs:{id:"define-keyword-with-validate-function"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#define-keyword-with-validate-function"}},[t._v("#")]),t._v(' Define keyword with "validate" function')]),t._v(" "),a("p",[t._v("Usual keyword definition for validation keywords:")]),t._v(" "),a("div",{staticClass:"language-typescript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("interface")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("FuncKeywordDefinition")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("_KeywordDef")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n validate"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" SchemaValidateFunction "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" DataValidateFunction "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// DataValidateFunction requires `schema: false` option")]),t._v("\n schema"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("boolean")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// schema: false makes validate not to expect schema (DataValidateFunction)")]),t._v("\n modifying"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("boolean")]),t._v("\n async"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("boolean")]),t._v("\n valid"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("boolean")]),t._v("\n errors"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("boolean")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"full"')]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("interface")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SchemaValidateFunction")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("schema"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" data"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" parentSchema"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" AnySchemaObject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" dataCxt"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" DataValidationCxt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("boolean")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("\n errors"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Partial"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("ErrorObject"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("interface")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DataValidateFunction")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Ajv "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" data"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" dataCxt"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" DataValidationCxt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("boolean")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Promise")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("\n errors"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Partial"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("ErrorObject"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("p",[t._v("The function should return validation result as boolean. It can return an array of validation errors via "),a("code",[t._v(".errors")]),t._v(" property of itself (otherwise a standard error will be used).")]),t._v(" "),a("p",[a("code",[t._v("validate")]),t._v(" keywords are suitable for:")]),t._v(" "),a("ul",[a("li",[t._v("testing your keywords before converting them to compiled/code keywords")]),t._v(" "),a("li",[t._v("defining keywords that do not depend on the schema value (e.g., when the value is always "),a("code",[t._v("true")]),t._v("). In this case you can add option "),a("code",[t._v("schema: false")]),t._v(" to the keyword definition and the schemas won't be passed to the validation function, it will only receive the same parameters as compiled validation function.")]),t._v(" "),a("li",[t._v("defining keywords where the schema is a value used in some expression.")]),t._v(" "),a("li",[t._v("defining keywords that support "),a("RouterLink",{attrs:{to:"/guide/combining-schemas.html#data-reference"}},[t._v("$data reference")]),t._v(" - in this case "),a("code",[t._v("validate")]),t._v(" or "),a("code",[t._v("code")]),t._v(" function is required, either as the only option or in addition to "),a("code",[t._v("compile")]),t._v(" or "),a("code",[t._v("macro")]),t._v(".")],1)]),t._v(" "),a("p",[t._v("Example: "),a("code",[t._v("constant")]),t._v(" keyword (a synonym for draft-06 keyword "),a("code",[t._v("const")]),t._v(", it is equivalent to "),a("code",[t._v("enum")]),t._v(" keyword with one item):")]),t._v(" "),a("div",{staticClass:"language-javascript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-javascript"}},[a("code",[t._v("ajv"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("addKeyword")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("keyword")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"constant"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("validate")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" data")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("typeof")]),t._v(" schema "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"object"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" schema "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!==")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("null")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("deepEqual")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" schema "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("===")]),t._v(" data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("errors")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" schema "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("constant")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" validate "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" ajv"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("compile")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nconsole"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("validate")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// true")]),t._v("\nconsole"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("validate")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// false")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" schema "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("constant")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("foo")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"bar"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" validate "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" ajv"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("compile")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nconsole"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("validate")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("foo")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"bar"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// true")]),t._v("\nconsole"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("validate")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("foo")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"baz"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// false")]),t._v("\n")])])]),a("p",[a("code",[t._v("const")]),t._v(" keyword is already available in Ajv.")]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("Keywords that do not define errors")]),t._v(" "),a("p",[t._v("If the keyword does not define errors (see "),a("RouterLink",{attrs:{to:"/api.html#reporting-errors"}},[t._v("Reporting errors")]),t._v(") pass "),a("code",[t._v("errors: false")]),t._v(" in its definition; it will make generated code more efficient.")],1)]),t._v(" "),a("p",[t._v("To add asynchronous keyword pass "),a("code",[t._v("async: true")]),t._v(" in its definition.")]),t._v(" "),a("h3",{attrs:{id:"define-keyword-with-compile-function"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#define-keyword-with-compile-function"}},[t._v("#")]),t._v(' Define keyword with "compile" function')]),t._v(" "),a("p",[t._v('The keyword is similar to "validate", with the difference that "compile" property has function that will be called during schema compilation and should return validation function:')]),t._v(" "),a("div",{staticClass:"language-typescript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("interface")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("FuncKeywordDefinition")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("_KeywordDef")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n compile"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("schema"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" parentSchema"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" AnySchemaObject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" it"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" SchemaObjCxt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" DataValidateFunction\n schema"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("boolean")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// schema: false makes validate not to expect schema (DataValidateFunction)")]),t._v("\n modifying"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("boolean")]),t._v("\n async"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("boolean")]),t._v("\n valid"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("boolean")]),t._v("\n errors"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("boolean")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"full"')]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("p",[t._v("In some cases it is the best approach to define keywords, but it has the performance cost of an extra function call during validation. If keyword logic can be expressed via some other JSON Schema then "),a("code",[t._v("macro")]),t._v(" keyword definition is more efficient (see below).")]),t._v(" "),a("p",[t._v("Example. "),a("code",[t._v("range")]),t._v(" and "),a("code",[t._v("exclusiveRange")]),t._v(" keywords using compiled schema:")]),t._v(" "),a("div",{staticClass:"language-javascript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-javascript"}},[a("code",[t._v("ajv"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("addKeyword")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("keyword")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"range"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"number"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("compile")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token parameter"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("min"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" max"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" parentSchema")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" parentSchema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("exclusiveRange "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("===")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("data")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" data "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" min "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" data "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("max")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("data")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" data "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">=")]),t._v(" min "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" data "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<=")]),t._v(" max\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("errors")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("metaSchema")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// schema to validate keyword value")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"array"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("items")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"number"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"number"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("minItems")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("additionalItems")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" schema "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("range")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("exclusiveRange")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" validate "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" ajv"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("compile")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("schema"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nconsole"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("validate")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2.01")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// true")]),t._v("\nconsole"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("validate")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3.99")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// true")]),t._v("\nconsole"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("validate")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// false")]),t._v("\nconsole"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("validate")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// false")]),t._v("\n")])])]),a("p",[t._v("See note on errors and asynchronous keywords in the previous section.")]),t._v(" "),a("h3",{attrs:{id:"define-keyword-with-macro-function"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#define-keyword-with-macro-function"}},[t._v("#")]),t._v(' Define keyword with "macro" function')]),t._v(" "),a("p",[t._v("Keyword definition:")]),t._v(" "),a("div",{staticClass:"language-typescript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("interface")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MacroKeywordDefinition")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("FuncKeywordDefinition")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("macro")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("schema"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("any")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" parentSchema"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" AnySchemaObject"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" it"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" SchemaCxt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" AnySchema\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("p",[t._v('"Macro" function is called during schema compilation. It is passed schema, parent schema and '),a("a",{attrs:{href:"#schema-compilation-context"}},[t._v("schema compilation context")]),t._v(" and it should return another schema that will be applied to the data in addition to the original schema.")]),t._v(" "),a("p",[t._v("It is an efficient approach (in cases when the keyword logic can be expressed with another JSON Schema), because it is usually easy to implement and there is no extra function call during validation.")]),t._v(" "),a("p",[t._v("In addition to the errors from the expanded schema macro keyword will add its own error in case validation fails.")]),t._v(" "),a("p",[t._v("Example. "),a("code",[t._v("range")]),t._v(" and "),a("code",[t._v("exclusiveRange")]),t._v(" keywords from the previous example defined with macro:")]),t._v(" "),a("div",{staticClass:"language-javascript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-javascript"}},[a("code",[t._v("ajv"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("addKeyword")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("keyword")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"range"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"number"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("macro")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token parameter"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("minimum"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" maximum"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("minimum"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" maximum"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// schema with keywords minimum and maximum")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// metaSchema: the same as in the example above")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),a("p",[t._v("Macro keywords can be recursive - i.e. return schemas containing the same keyword. See the example of defining a recursive macro keyword "),a("code",[t._v("deepProperties")]),t._v(" in the "),a("a",{attrs:{href:"https://github.com/ajv-validator/ajv/blob/master/spec/keyword.spec.ts#L316",target:"_blank",rel:"noopener noreferrer"}},[t._v("test"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("h2",{attrs:{id:"schema-compilation-context"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#schema-compilation-context"}},[t._v("#")]),t._v(" Schema compilation context")]),t._v(" "),a("p",[t._v("Schema compilation context "),a("a",{attrs:{href:"https://github.com/ajv-validator/ajv/blob/master/lib/compile/index.ts",target:"_blank",rel:"noopener noreferrer"}},[t._v("SchemaCxt"),a("OutboundLink")],1),t._v(" is available in property "),a("code",[t._v("it")]),t._v(" of "),a("a",{attrs:{href:"https://github.com/ajv-validator/ajv/blob/master/lib/compile/validate/index.ts",target:"_blank",rel:"noopener noreferrer"}},[t._v("KeywordCxt"),a("OutboundLink")],1),t._v(" (and it is also the 3rd parameter of "),a("code",[t._v("compile")]),t._v(" and "),a("code",[t._v("macro")]),t._v(" keyword functions). See types in the source code on the properties you can use in this object.")]),t._v(" "),a("h2",{attrs:{id:"validation-time-variables"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#validation-time-variables"}},[t._v("#")]),t._v(" Validation time variables")]),t._v(" "),a("p",[t._v("All function scoped variables available during validation are defined in "),a("a",{attrs:{href:"https://github.com/ajv-validator/ajv/blob/master/lib/compile/names.ts",target:"_blank",rel:"noopener noreferrer"}},[t._v("names"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("h2",{attrs:{id:"reporting-errors"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#reporting-errors"}},[t._v("#")]),t._v(" Reporting errors")]),t._v(" "),a("p",[t._v("All keywords can define error messages with "),a("code",[t._v("KeywordErrorDefinition")]),t._v(" object passed as "),a("code",[t._v("error")]),t._v(" property of keyword definition:")]),t._v(" "),a("div",{staticClass:"language-typescript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-typescript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("interface")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("KeywordErrorDefinition")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n message"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("cxt"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" KeywordErrorCxt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" Code"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n params"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("cxt"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" KeywordErrorCxt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" Code\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("p",[a("code",[t._v("code")]),t._v(" keywords can pass parameters to these functions via "),a("code",[t._v("cxt.setParams")]),t._v(" (see implementations of pre-defined keywords), other keywords can only set a string message this way.")]),t._v(" "),a("p",[t._v("Another approach for reporting errors can be used for "),a("code",[t._v("validate")]),t._v(" and "),a("code",[t._v("compile")]),t._v(" keyword - they can define errors by assigning them to "),a("code",[t._v(".errors")]),t._v(" property of the validation function. Asynchronous keywords can return promise that rejects with "),a("code",[t._v("new Ajv.ValidationError(errors)")]),t._v(", where "),a("code",[t._v("errors")]),t._v(" is an array of validation errors (if you don't want to create errors in asynchronous keyword, its validation function can return the promise that resolves with "),a("code",[t._v("false")]),t._v(").")]),t._v(" "),a("p",[t._v("Each error object in "),a("code",[t._v("errors")]),t._v(" array should at least have properties "),a("code",[t._v("keyword")]),t._v(", "),a("code",[t._v("message")]),t._v(" and "),a("code",[t._v("params")]),t._v(", other properties will be added.")]),t._v(" "),a("p",[t._v("If keyword doesn't define or return errors, the default error will be created in case the keyword fails validation.")])])}),[],!1,null,null,null);a.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/74.dc73eb16.js b/assets/js/74.dc73eb16.js new file mode 100644 index 000000000..a7a9aedea --- /dev/null +++ b/assets/js/74.dc73eb16.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[74],{421:function(t,e,a){"use strict";a.r(e);var s=a(14),r=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"ajv-options"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#ajv-options"}},[t._v("#")]),t._v(" Ajv options")]),t._v(" "),e("p"),e("div",{staticClass:"table-of-contents"},[e("ul",[e("li",[e("a",{attrs:{href:"#usage"}},[t._v("Usage")])]),e("li",[e("a",{attrs:{href:"#option-defaults"}},[t._v("Option defaults")])]),e("li",[e("a",{attrs:{href:"#strict-mode-options"}},[t._v("Strict mode options "),e("Badge",{attrs:{text:"v7"}})],1),e("ul",[e("li",[e("a",{attrs:{href:"#strict"}},[t._v("strict")])]),e("li",[e("a",{attrs:{href:"#strictschema"}},[t._v("strictSchema")])]),e("li",[e("a",{attrs:{href:"#strictnumbers"}},[t._v("strictNumbers")])]),e("li",[e("a",{attrs:{href:"#stricttypes"}},[t._v("strictTypes")])]),e("li",[e("a",{attrs:{href:"#stricttuples"}},[t._v("strictTuples")])]),e("li",[e("a",{attrs:{href:"#strictrequired"}},[t._v("strictRequired")])]),e("li",[e("a",{attrs:{href:"#allowuniontypes"}},[t._v("allowUnionTypes")])]),e("li",[e("a",{attrs:{href:"#allowmatchingproperties"}},[t._v("allowMatchingProperties")])]),e("li",[e("a",{attrs:{href:"#validateformats"}},[t._v("validateFormats")])])])]),e("li",[e("a",{attrs:{href:"#validation-and-reporting-options"}},[t._v("Validation and reporting options")]),e("ul",[e("li",[e("a",{attrs:{href:"#data"}},[t._v("$data")])]),e("li",[e("a",{attrs:{href:"#allerrors"}},[t._v("allErrors")])]),e("li",[e("a",{attrs:{href:"#verbose"}},[t._v("verbose")])]),e("li",[e("a",{attrs:{href:"#discriminator"}},[t._v("discriminator")])]),e("li",[e("a",{attrs:{href:"#unicoderegexp"}},[t._v("unicodeRegExp")])]),e("li",[e("a",{attrs:{href:"#timestamp"}},[t._v("timestamp "),e("Badge",{attrs:{text:"JTD only"}})],1)]),e("li",[e("a",{attrs:{href:"#parsedate"}},[t._v("parseDate "),e("Badge",{attrs:{text:"JTD only"}})],1)]),e("li",[e("a",{attrs:{href:"#allowdate"}},[t._v("allowDate "),e("Badge",{attrs:{text:"JTD only"}})],1)]),e("li",[e("a",{attrs:{href:"#int32range"}},[t._v("int32range "),e("Badge",{attrs:{text:"JTD only"}})],1)]),e("li",[e("a",{attrs:{href:"#comment"}},[t._v("$comment")])]),e("li",[e("a",{attrs:{href:"#formats"}},[t._v("formats")])]),e("li",[e("a",{attrs:{href:"#keywords"}},[t._v("keywords")])]),e("li",[e("a",{attrs:{href:"#schemas"}},[t._v("schemas")])]),e("li",[e("a",{attrs:{href:"#logger"}},[t._v("logger")])]),e("li",[e("a",{attrs:{href:"#loadschema"}},[t._v("loadSchema")])])])]),e("li",[e("a",{attrs:{href:"#options-to-modify-validated-data"}},[t._v("Options to modify validated data")]),e("ul",[e("li",[e("a",{attrs:{href:"#removeadditional"}},[t._v("removeAdditional")])]),e("li",[e("a",{attrs:{href:"#usedefaults"}},[t._v("useDefaults")])]),e("li",[e("a",{attrs:{href:"#coercetypes"}},[t._v("coerceTypes")])])])]),e("li",[e("a",{attrs:{href:"#advanced-options"}},[t._v("Advanced options")]),e("ul",[e("li",[e("a",{attrs:{href:"#meta"}},[t._v("meta")])]),e("li",[e("a",{attrs:{href:"#validateschema"}},[t._v("validateSchema")])]),e("li",[e("a",{attrs:{href:"#addusedschema"}},[t._v("addUsedSchema")])]),e("li",[e("a",{attrs:{href:"#inlinerefs"}},[t._v("inlineRefs")])]),e("li",[e("a",{attrs:{href:"#passcontext"}},[t._v("passContext")])]),e("li",[e("a",{attrs:{href:"#looprequired"}},[t._v("loopRequired")])]),e("li",[e("a",{attrs:{href:"#loopenum"}},[t._v("loopEnum "),e("Badge",{attrs:{text:"v7"}})],1)]),e("li",[e("a",{attrs:{href:"#ownproperties"}},[t._v("ownProperties")])]),e("li",[e("a",{attrs:{href:"#multipleofprecision"}},[t._v("multipleOfPrecision")])]),e("li",[e("a",{attrs:{href:"#messages"}},[t._v("messages")])]),e("li",[e("a",{attrs:{href:"#uriresolver"}},[t._v("uriResolver")])]),e("li",[e("a",{attrs:{href:"#code"}},[t._v("code "),e("Badge",{attrs:{text:"v7"}})],1)])])])])]),e("p"),t._v(" "),e("h2",{attrs:{id:"usage"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#usage"}},[t._v("#")]),t._v(" Usage")]),t._v(" "),e("p",[t._v("This page describes properties of the options object that can be passed to Ajv constructor.")]),t._v(" "),e("p",[t._v("For example, to report all validation errors (rather than failing on the first errors) you should pass "),e("code",[t._v("allErrors")]),t._v(" option to constructor:")]),t._v(" "),e("div",{staticClass:"language-javascript extra-class"},[e("pre",{pre:!0,attrs:{class:"language-javascript"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" ajv "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Ajv")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),e("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("allErrors")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("h2",{attrs:{id:"option-defaults"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#option-defaults"}},[t._v("#")]),t._v(" Option defaults")]),t._v(" "),e("div",{staticClass:"custom-block tip"},[e("p",{staticClass:"custom-block-title"},[t._v("Do NOT pass default options")]),t._v(" "),e("p",[t._v("Passing the value below for some of the options is equivalent to not passing this option at all. There is no need to pass default option values - it is recommended to only pass option values that are different from defaults.")])]),t._v(" "),e("div",{staticClass:"language-javascript extra-class"},[e("pre",{pre:!0,attrs:{class:"language-javascript"}},[e("code",[e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// see types/index.ts for actual types")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" defaultOptions "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// strict mode options (NEW)")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("strict")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("undefined")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// *")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("strictSchema")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// *")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("strictNumbers")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// *")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("strictTypes")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"log"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// *")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("strictTuples")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"log"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// *")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("strictRequired")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// *")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("allowUnionTypes")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// *")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("allowMatchingProperties")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// *")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("validateFormats")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// *")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// validation and reporting options:")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("$data")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// *")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("allErrors")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("verbose")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("discriminator")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// *")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("unicodeRegExp")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// *")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("timestamp")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("undefined")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// **")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("parseDate")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// **")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("allowDate")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// **")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("int32range")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// **")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("$comment")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// *")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("formats")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("keywords")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("schemas")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("logger")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("undefined")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("loadSchema")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("undefined")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// *, function(uri: string): Promise {}")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// options to modify validated data:")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("removeAdditional")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("useDefaults")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// *")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("coerceTypes")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// *")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// advanced options:")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("meta")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("validateSchema")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("addUsedSchema")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("inlineRefs")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("passContext")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("loopRequired")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("200")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// *")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("loopEnum")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("200")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// NEW")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("ownProperties")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("multipleOfPrecision")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("undefined")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// *")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("messages")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// false with JTD")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("uriResolver")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("undefined")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("code")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// NEW")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("es5")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("esm")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("lines")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("source")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("process")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("undefined")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// (code: string) => string")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("optimize")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("regExp")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" RegExp\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),e("p",[e("sup",[t._v("*")]),t._v(" only with JSON Schema")]),t._v(" "),e("p",[e("sup",[t._v("**")]),t._v(" only with JSON Type Definition")]),t._v(" "),e("h2",{attrs:{id:"strict-mode-options"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#strict-mode-options"}},[t._v("#")]),t._v(" Strict mode options "),e("Badge",{attrs:{text:"v7"}})],1),t._v(" "),e("h3",{attrs:{id:"strict"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#strict"}},[t._v("#")]),t._v(" strict")]),t._v(" "),e("p",[t._v("By default Ajv executes in strict mode, that is designed to prevent any unexpected behaviours or silently ignored mistakes in schemas (see "),e("RouterLink",{attrs:{to:"/strict-mode.html"}},[t._v("Strict Mode")]),t._v(" for more details). It does not change any validation results, but it makes some schemas invalid that would be otherwise valid according to JSON Schema specification.")],1),t._v(" "),e("p",[t._v("Option values:")]),t._v(" "),e("ul",[e("li",[e("code",[t._v("true")]),t._v(" - throw an exception when any strict mode restriction is violated.")]),t._v(" "),e("li",[e("code",[t._v('"log"')]),t._v(" - log warning when any strict mode restriction is violated.")]),t._v(" "),e("li",[e("code",[t._v("false")]),t._v(" - ignore all strict mode violations.")]),t._v(" "),e("li",[e("code",[t._v("undefined")]),t._v(" (default) - use defaults for options strictSchema, strictNumbers, strictTypes, strictTuples and strictRequired.")])]),t._v(" "),e("h3",{attrs:{id:"strictschema"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#strictschema"}},[t._v("#")]),t._v(" strictSchema")]),t._v(" "),e("p",[t._v("Prevent unknown keywords, formats etc. (see "),e("RouterLink",{attrs:{to:"/strict-mode.html#strict-schema"}},[t._v("Strict schema")]),t._v(")")],1),t._v(" "),e("p",[t._v("Option values:")]),t._v(" "),e("ul",[e("li",[e("code",[t._v("true")]),t._v(" (default) - throw an exception when any strict schema restriction is violated.")]),t._v(" "),e("li",[e("code",[t._v('"log"')]),t._v(" - log warning when any strict schema restriction is violated.")]),t._v(" "),e("li",[e("code",[t._v("false")]),t._v(" - ignore all strict schema violations.")])]),t._v(" "),e("h3",{attrs:{id:"strictnumbers"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#strictnumbers"}},[t._v("#")]),t._v(" strictNumbers")]),t._v(" "),e("p",[t._v("Whether to accept "),e("code",[t._v("NaN")]),t._v(" and "),e("code",[t._v("Infinity")]),t._v(" as number types during validation.")]),t._v(" "),e("p",[t._v("Option values:")]),t._v(" "),e("ul",[e("li",[e("code",[t._v("true")]),t._v(" (default) - fail validation if "),e("code",[t._v("NaN")]),t._v(" or "),e("code",[t._v("Infinity")]),t._v(" is passed where number is expected.")]),t._v(" "),e("li",[e("code",[t._v("false")]),t._v(" - allow "),e("code",[t._v("NaN")]),t._v(" and "),e("code",[t._v("Infinity")]),t._v(" as number.")])]),t._v(" "),e("h3",{attrs:{id:"stricttypes"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#stricttypes"}},[t._v("#")]),t._v(" strictTypes")]),t._v(" "),e("p",[t._v("See "),e("RouterLink",{attrs:{to:"/strict-mode.html#strict-types"}},[t._v("Strict types")])],1),t._v(" "),e("p",[t._v("Option values:")]),t._v(" "),e("ul",[e("li",[e("code",[t._v("true")]),t._v(" - throw an exception when any strict types restriction is violated.")]),t._v(" "),e("li",[e("code",[t._v('"log"')]),t._v(" (default) - log warning when any strict types restriction is violated.")]),t._v(" "),e("li",[e("code",[t._v("false")]),t._v(" - ignore all strict types violations.")])]),t._v(" "),e("h3",{attrs:{id:"stricttuples"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#stricttuples"}},[t._v("#")]),t._v(" strictTuples")]),t._v(" "),e("p",[t._v("See "),e("RouterLink",{attrs:{to:"/strict-mode.html#unconstrained-tuples"}},[t._v("Unconstrained tuples")])],1),t._v(" "),e("p",[t._v("Option values:")]),t._v(" "),e("ul",[e("li",[e("code",[t._v("true")]),t._v(" - throw an exception when any strict tuples restriction is violated.")]),t._v(" "),e("li",[e("code",[t._v('"log"')]),t._v(" (default) - log warning when any strict tuples restriction is violated.")]),t._v(" "),e("li",[e("code",[t._v("false")]),t._v(" - ignore all strict tuples violations.")])]),t._v(" "),e("h3",{attrs:{id:"strictrequired"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#strictrequired"}},[t._v("#")]),t._v(" strictRequired")]),t._v(" "),e("p",[t._v("See "),e("RouterLink",{attrs:{to:"/strict-mode.html#defined-required-properties"}},[t._v("Defined required properties")])],1),t._v(" "),e("p",[t._v("Option values:")]),t._v(" "),e("ul",[e("li",[e("code",[t._v("true")]),t._v(" - throw an exception when strict required restriction is violated.")]),t._v(" "),e("li",[e("code",[t._v('"log"')]),t._v(" - log warning when strict required restriction is violated.")]),t._v(" "),e("li",[e("code",[t._v("false")]),t._v(" (default) - ignore strict required violations.")])]),t._v(" "),e("h3",{attrs:{id:"allowuniontypes"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#allowuniontypes"}},[t._v("#")]),t._v(" allowUnionTypes")]),t._v(" "),e("p",[t._v('Pass true to allow using multiple non-null types in "type" keyword (one of '),e("code",[t._v("strictTypes")]),t._v(" restrictions). see "),e("RouterLink",{attrs:{to:"/strict-mode.html#strict-types"}},[t._v("Strict types")])],1),t._v(" "),e("h3",{attrs:{id:"allowmatchingproperties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#allowmatchingproperties"}},[t._v("#")]),t._v(" allowMatchingProperties")]),t._v(" "),e("p",[t._v('Pass true to allow overlap between "properties" and "patternProperties". Does not affect other strict mode restrictions. See '),e("RouterLink",{attrs:{to:"/strict-mode.html"}},[t._v("Strict Mode")]),t._v(".")],1),t._v(" "),e("h3",{attrs:{id:"validateformats"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#validateformats"}},[t._v("#")]),t._v(" validateFormats")]),t._v(" "),e("p",[t._v("Format validation.")]),t._v(" "),e("p",[t._v("Option values:")]),t._v(" "),e("ul",[e("li",[e("code",[t._v("true")]),t._v(" (default) - validate formats (see "),e("RouterLink",{attrs:{to:"/guide/formats.html"}},[t._v("Formats")]),t._v("). In "),e("RouterLink",{attrs:{to:"/strict-mode.html"}},[t._v("strict mode")]),t._v(" unknown formats will throw exception during schema compilation (and fail validation in case format keyword value is "),e("RouterLink",{attrs:{to:"/guide/combining-schemas.html#data-reference"}},[t._v("$data reference")]),t._v(").")],1),t._v(" "),e("li",[e("code",[t._v("false")]),t._v(" - do not validate any format keywords (TODO they will still collect annotations once supported).")])]),t._v(" "),e("h2",{attrs:{id:"validation-and-reporting-options"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#validation-and-reporting-options"}},[t._v("#")]),t._v(" Validation and reporting options")]),t._v(" "),e("h3",{attrs:{id:"data"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#data"}},[t._v("#")]),t._v(" $data")]),t._v(" "),e("p",[t._v("Support "),e("RouterLink",{attrs:{to:"/guide/combining-schemas.html#data-reference"}},[t._v("$data references")]),t._v(". Draft 6 meta-schema that is added by default will be extended to allow them. If you want to use another meta-schema you need to use $dataMetaSchema method to add support for $data reference. See "),e("a",{attrs:{href:"#ajv-constructor-and-methods"}},[t._v("API")]),t._v(".")],1),t._v(" "),e("h3",{attrs:{id:"allerrors"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#allerrors"}},[t._v("#")]),t._v(" allErrors")]),t._v(" "),e("p",[t._v("Check all rules collecting all errors. Default is to return after the first error.")]),t._v(" "),e("h3",{attrs:{id:"verbose"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#verbose"}},[t._v("#")]),t._v(" verbose")]),t._v(" "),e("p",[t._v("Include the reference to the part of the schema ("),e("code",[t._v("schema")]),t._v(" and "),e("code",[t._v("parentSchema")]),t._v(") and validated data in errors (false by default).")]),t._v(" "),e("h3",{attrs:{id:"discriminator"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#discriminator"}},[t._v("#")]),t._v(" discriminator")]),t._v(" "),e("p",[t._v("Support "),e("RouterLink",{attrs:{to:"/json-schema.html#discriminator"}},[t._v("discriminator keyword")]),t._v(" from "),e("a",{attrs:{href:"https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md",target:"_blank",rel:"noopener noreferrer"}},[t._v("OpenAPI specification"),e("OutboundLink")],1),t._v(".")],1),t._v(" "),e("h3",{attrs:{id:"unicoderegexp"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#unicoderegexp"}},[t._v("#")]),t._v(" unicodeRegExp")]),t._v(" "),e("p",[t._v('By default Ajv uses unicode flag "u" with "pattern" and "patternProperties", as per JSON Schema spec. See '),e("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/unicode",target:"_blank",rel:"noopener noreferrer"}},[t._v("RegExp.prototype.unicode"),e("OutboundLink")],1),t._v(" .")]),t._v(" "),e("p",[t._v("Option values:")]),t._v(" "),e("ul",[e("li",[e("code",[t._v("true")]),t._v(' (default) - use unicode flag "u".')]),t._v(" "),e("li",[e("code",[t._v("false")]),t._v(' - do not use flag "u".')])]),t._v(" "),e("h3",{attrs:{id:"timestamp"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#timestamp"}},[t._v("#")]),t._v(" timestamp "),e("Badge",{attrs:{text:"JTD only"}})],1),t._v(" "),e("p",[t._v("Defines which Javascript types will be accepted for the "),e("a",{attrs:{href:"./json-type-definition#type-form"}},[t._v("JTD timestamp type")]),t._v(".")]),t._v(" "),e("p",[t._v("By default Ajv will accept both Date objects and "),e("a",{attrs:{href:"https://datatracker.ietf.org/doc/rfc3339/",target:"_blank",rel:"noopener noreferrer"}},[t._v("RFC3339"),e("OutboundLink")],1),t._v(" strings. You can specify allowed values with the option "),e("code",[t._v('timestamp: "date"')]),t._v(" or "),e("code",[t._v('timestamp: "string"')]),t._v(".")]),t._v(" "),e("h3",{attrs:{id:"parsedate"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#parsedate"}},[t._v("#")]),t._v(" parseDate "),e("Badge",{attrs:{text:"JTD only"}})],1),t._v(" "),e("p",[t._v("Defines how date-time strings are parsed by "),e("RouterLink",{attrs:{to:"/api.html#jtd-parse"}},[t._v("JTD parsers")]),t._v(". By default Ajv parses date-time strings as string. Use "),e("code",[t._v("parseDate: true")]),t._v(" to parse them as Date objects.")],1),t._v(" "),e("h3",{attrs:{id:"allowdate"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#allowdate"}},[t._v("#")]),t._v(" allowDate "),e("Badge",{attrs:{text:"JTD only"}})],1),t._v(" "),e("p",[t._v("Defines how date-time strings are parsed and validated. By default Ajv only allows full date-time strings, as required by JTD specification. Use "),e("code",[t._v("allowDate: true")]),t._v(" to allow date strings both for validation and for parsing.")]),t._v(" "),e("div",{staticClass:"custom-block warning"},[e("p",{staticClass:"custom-block-title"},[t._v("Option allowDate is not portable")]),t._v(" "),e("p",[t._v("This option makes JTD validation and parsing more permissive and non-standard. The date strings without time part will be accepted by Ajv, but will be rejected by other JTD validators.")])]),t._v(" "),e("h3",{attrs:{id:"int32range"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#int32range"}},[t._v("#")]),t._v(" int32range "),e("Badge",{attrs:{text:"JTD only"}})],1),t._v(" "),e("p",[t._v("Can be used to disable range checking for "),e("code",[t._v("int32")]),t._v(" and "),e("code",[t._v("uint32")]),t._v(" types.")]),t._v(" "),e("p",[t._v("By default Ajv limits the range of these types to "),e("code",[t._v("[-2**31, 2**31 - 1]")]),t._v(" for "),e("code",[t._v("int32")]),t._v(" and to "),e("code",[t._v("[0, 2**32-1]")]),t._v(" for "),e("code",[t._v("uint32")]),t._v(" when validating and parsing.")]),t._v(" "),e("p",[t._v("With option "),e("code",[t._v("int32range: false")]),t._v(" Ajv only requires that "),e("code",[t._v("uint32")]),t._v(" is non-negative, otherwise does not check the range. Parser will limit the number size to 16 digits (approx. "),e("code",[t._v("2**53")]),t._v(" - safe integer range).")]),t._v(" "),e("div",{staticClass:"custom-block warning"},[e("p",{staticClass:"custom-block-title"},[t._v("Option int32range is not portable")]),t._v(" "),e("p",[t._v("This option makes JTD validation and parsing more permissive and non-standard. The integers within a wider range will be accepted by Ajv, but will be rejected by other JTD validators.")])]),t._v(" "),e("h3",{attrs:{id:"comment"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#comment"}},[t._v("#")]),t._v(" $comment")]),t._v(" "),e("p",[t._v("Log or pass the value of "),e("code",[t._v("$comment")]),t._v(" keyword to a function.")]),t._v(" "),e("p",[t._v("Option values:")]),t._v(" "),e("ul",[e("li",[e("code",[t._v("false")]),t._v(" (default): ignore $comment keyword.")]),t._v(" "),e("li",[e("code",[t._v("true")]),t._v(": log the keyword value to console.")]),t._v(" "),e("li",[t._v("function: pass the keyword value, its schema path and root schema to the specified function")])]),t._v(" "),e("h3",{attrs:{id:"formats"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#formats"}},[t._v("#")]),t._v(" formats")]),t._v(" "),e("p",[t._v("An object with format definitions. Keys and values will be passed to "),e("code",[t._v("addFormat")]),t._v(" method. Pass "),e("code",[t._v("true")]),t._v(" as format definition to ignore some formats.")]),t._v(" "),e("h3",{attrs:{id:"keywords"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#keywords"}},[t._v("#")]),t._v(" keywords")]),t._v(" "),e("p",[t._v("An array of keyword definitions or strings. Values will be passed to "),e("code",[t._v("addKeyword")]),t._v(" method.")]),t._v(" "),e("h3",{attrs:{id:"schemas"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#schemas"}},[t._v("#")]),t._v(" schemas")]),t._v(" "),e("p",[t._v("An array or object of schemas that will be added to the instance. In case you pass the array the schemas must have IDs in them. When the object is passed the method "),e("code",[t._v("addSchema(value, key)")]),t._v(" will be called for each schema in this object.")]),t._v(" "),e("h3",{attrs:{id:"logger"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#logger"}},[t._v("#")]),t._v(" logger")]),t._v(" "),e("p",[t._v("Sets the logging method. Default is the global "),e("code",[t._v("console")]),t._v(" object that should have methods "),e("code",[t._v("log")]),t._v(", "),e("code",[t._v("warn")]),t._v(" and "),e("code",[t._v("error")]),t._v(". See "),e("RouterLink",{attrs:{to:"/api.html#error-logging"}},[t._v("Error logging")]),t._v(".")],1),t._v(" "),e("p",[t._v("Option values:")]),t._v(" "),e("ul",[e("li",[t._v("logger instance - it should have methods "),e("code",[t._v("log")]),t._v(", "),e("code",[t._v("warn")]),t._v(" and "),e("code",[t._v("error")]),t._v(". If any of these methods is missing an exception will be thrown.")]),t._v(" "),e("li",[e("code",[t._v("false")]),t._v(" - logging is disabled.")])]),t._v(" "),e("h3",{attrs:{id:"loadschema"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#loadschema"}},[t._v("#")]),t._v(" loadSchema")]),t._v(" "),e("p",[t._v("Asynchronous function that will be used to load remote schemas when "),e("code",[t._v("compileAsync")]),t._v(" "),e("a",{attrs:{href:"#api-compileAsync"}},[t._v("method")]),t._v(" is used and some reference is missing (option "),e("code",[t._v("missingRefs")]),t._v(" should NOT be 'fail' or 'ignore'). This function should accept remote schema uri as a parameter and return a Promise that resolves to a schema. See example in "),e("RouterLink",{attrs:{to:"/guide/managing-schemas.html#asynchronous-schema-compilation"}},[t._v("Asynchronous compilation")]),t._v(".")],1),t._v(" "),e("h2",{attrs:{id:"options-to-modify-validated-data"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#options-to-modify-validated-data"}},[t._v("#")]),t._v(" Options to modify validated data")]),t._v(" "),e("h3",{attrs:{id:"removeadditional"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#removeadditional"}},[t._v("#")]),t._v(" removeAdditional")]),t._v(" "),e("p",[t._v("Remove additional properties - see example in "),e("RouterLink",{attrs:{to:"/guide/modifying-data.html#removing-additional-properties"}},[t._v("Removing additional properties")]),t._v(".")],1),t._v(" "),e("p",[t._v("This option is not used if schema is added with "),e("code",[t._v("addMetaSchema")]),t._v(" method.")]),t._v(" "),e("p",[t._v("Option values:")]),t._v(" "),e("ul",[e("li",[e("code",[t._v("false")]),t._v(" (default) - not to remove additional properties")]),t._v(" "),e("li",[e("code",[t._v('"all"')]),t._v(" - all additional properties are removed, regardless of "),e("code",[t._v("additionalProperties")]),t._v(" keyword in schema (and no validation is made for them).")]),t._v(" "),e("li",[e("code",[t._v("true")]),t._v(" - only additional properties with "),e("code",[t._v("additionalProperties")]),t._v(" keyword equal to "),e("code",[t._v("false")]),t._v(" are removed.")]),t._v(" "),e("li",[e("code",[t._v('"failing"')]),t._v(" - additional properties that fail schema validation will be removed (where "),e("code",[t._v("additionalProperties")]),t._v(" keyword is "),e("code",[t._v("false")]),t._v(" or schema).")])]),t._v(" "),e("h3",{attrs:{id:"usedefaults"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#usedefaults"}},[t._v("#")]),t._v(" useDefaults")]),t._v(" "),e("p",[t._v("Replace missing or undefined properties and items with the values from corresponding "),e("code",[t._v("default")]),t._v(" keywords. Default behaviour is to ignore "),e("code",[t._v("default")]),t._v(" keywords. This option is not used if schema is added with "),e("code",[t._v("addMetaSchema")]),t._v(" method.")]),t._v(" "),e("p",[t._v("See examples in "),e("RouterLink",{attrs:{to:"/guide/modifying-data.html#assigning-defaults"}},[t._v("Assigning defaults")]),t._v(".")],1),t._v(" "),e("p",[t._v("Option values:")]),t._v(" "),e("ul",[e("li",[e("code",[t._v("false")]),t._v(" (default) - do not use defaults")]),t._v(" "),e("li",[e("code",[t._v("true")]),t._v(" - insert defaults by value (object literal is used).")]),t._v(" "),e("li",[e("code",[t._v('"empty"')]),t._v(" - in addition to missing or undefined, use defaults for properties and items that are equal to "),e("code",[t._v("null")]),t._v(" or "),e("code",[t._v('""')]),t._v(" (an empty string).")])]),t._v(" "),e("h3",{attrs:{id:"coercetypes"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#coercetypes"}},[t._v("#")]),t._v(" coerceTypes")]),t._v(" "),e("p",[t._v("Change data type of data to match "),e("code",[t._v("type")]),t._v(" keyword. See the example in "),e("RouterLink",{attrs:{to:"/guide/modifying-data.html#coercing-data-types"}},[t._v("Coercing data types")]),t._v(" and "),e("RouterLink",{attrs:{to:"/coercion.html"}},[t._v("coercion rules")]),t._v(".")],1),t._v(" "),e("p",[t._v("Option values:")]),t._v(" "),e("ul",[e("li",[e("code",[t._v("false")]),t._v(" (default) - no type coercion.")]),t._v(" "),e("li",[e("code",[t._v("true")]),t._v(" - coerce scalar data types.")]),t._v(" "),e("li",[e("code",[t._v('"array"')]),t._v(" - in addition to coercions between scalar types, coerce scalar data to an array with one element and vice versa (as required by the schema).")])]),t._v(" "),e("h2",{attrs:{id:"advanced-options"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#advanced-options"}},[t._v("#")]),t._v(" Advanced options")]),t._v(" "),e("h3",{attrs:{id:"meta"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#meta"}},[t._v("#")]),t._v(" meta")]),t._v(" "),e("p",[t._v("Add "),e("a",{attrs:{href:"http://json-schema.org/documentation.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("meta-schema"),e("OutboundLink")],1),t._v(" so it can be used by other schemas (true by default). If an object is passed, it will be used as the default meta-schema for schemas that have no "),e("code",[t._v("$schema")]),t._v(" keyword. This default meta-schema MUST have "),e("code",[t._v("$schema")]),t._v(" keyword.")]),t._v(" "),e("h3",{attrs:{id:"validateschema"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#validateschema"}},[t._v("#")]),t._v(" validateSchema")]),t._v(" "),e("p",[t._v("Validate added/compiled schemas against meta-schema (true by default). "),e("code",[t._v("$schema")]),t._v(" property in the schema can be http://json-schema.org/draft-07/schema or absent (draft-07 meta-schema will be used) or can be a reference to the schema previously added with "),e("code",[t._v("addMetaSchema")]),t._v(" method.")]),t._v(" "),e("p",[t._v("Option values:")]),t._v(" "),e("ul",[e("li",[e("code",[t._v("true")]),t._v(" (default) - if the validation fails, throw the exception.")]),t._v(" "),e("li",[e("code",[t._v('"log"')]),t._v(" - if the validation fails, log error.")]),t._v(" "),e("li",[e("code",[t._v("false")]),t._v(" - skip schema validation.")])]),t._v(" "),e("h3",{attrs:{id:"addusedschema"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#addusedschema"}},[t._v("#")]),t._v(" addUsedSchema")]),t._v(" "),e("p",[t._v("By default methods "),e("code",[t._v("compile")]),t._v(" and "),e("code",[t._v("validate")]),t._v(" add schemas to the instance if they have "),e("code",[t._v("$id")]),t._v(" (or "),e("code",[t._v("id")]),t._v(') property that doesn\'t start with "#". If '),e("code",[t._v("$id")]),t._v(" is present and it is not unique the exception will be thrown. Set this option to "),e("code",[t._v("false")]),t._v(" to skip adding schemas to the instance and the "),e("code",[t._v("$id")]),t._v(" uniqueness check when these methods are used. This option does not affect "),e("code",[t._v("addSchema")]),t._v(" method.")]),t._v(" "),e("h3",{attrs:{id:"inlinerefs"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#inlinerefs"}},[t._v("#")]),t._v(" inlineRefs")]),t._v(" "),e("p",[t._v("Affects compilation of referenced schemas.")]),t._v(" "),e("p",[t._v("Option values:")]),t._v(" "),e("ul",[e("li",[e("code",[t._v("true")]),t._v(" (default) - the referenced schemas that don't have refs in them are inlined, regardless of their size - it improves performance.")]),t._v(" "),e("li",[e("code",[t._v("false")]),t._v(" - to not inline referenced schemas (they will always be compiled as separate functions).")]),t._v(" "),e("li",[t._v("integer number - to limit the maximum number of keywords of the schema that will be inlined (to balance the total size of compiled functions and performance).")])]),t._v(" "),e("h3",{attrs:{id:"passcontext"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#passcontext"}},[t._v("#")]),t._v(" passContext")]),t._v(" "),e("p",[t._v("Pass validation context to "),e("em",[t._v("compile")]),t._v(" and "),e("em",[t._v("validate")]),t._v(" keyword functions. If this option is "),e("code",[t._v("true")]),t._v(" and you pass some context to the compiled validation function with "),e("code",[t._v("validate.call(context, data)")]),t._v(", the "),e("code",[t._v("context")]),t._v(" will be available as "),e("code",[t._v("this")]),t._v(" in your keywords. By default "),e("code",[t._v("this")]),t._v(" is Ajv instance.")]),t._v(" "),e("h3",{attrs:{id:"looprequired"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#looprequired"}},[t._v("#")]),t._v(" loopRequired")]),t._v(" "),e("p",[t._v("By default "),e("code",[t._v("required")]),t._v(" keyword is compiled into a single expression (or a sequence of statements in "),e("code",[t._v("allErrors")]),t._v(" mode) up to 200 required properties. Pass integer to set a different number of properties above which "),e("code",[t._v("required")]),t._v(" keyword will be validated in a loop (with a smaller validation function size and worse performance).")]),t._v(" "),e("h3",{attrs:{id:"loopenum"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#loopenum"}},[t._v("#")]),t._v(" loopEnum "),e("Badge",{attrs:{text:"v7"}})],1),t._v(" "),e("p",[t._v("By default "),e("code",[t._v("enum")]),t._v(" keyword is compiled into a single expression with up to 200 allowed values. Pass integer to set the number of values above which "),e("code",[t._v("enum")]),t._v(" keyword will be validated in a loop (with a smaller validation function size and worse performance).")]),t._v(" "),e("h3",{attrs:{id:"ownproperties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#ownproperties"}},[t._v("#")]),t._v(" ownProperties")]),t._v(" "),e("p",[t._v("By default Ajv iterates over all enumerable object properties; when this option is "),e("code",[t._v("true")]),t._v(" only own enumerable object properties (i.e. found directly on the object rather than on its prototype) are iterated. Contributed by @mbroadst.")]),t._v(" "),e("h3",{attrs:{id:"multipleofprecision"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#multipleofprecision"}},[t._v("#")]),t._v(" multipleOfPrecision")]),t._v(" "),e("p",[t._v("By default "),e("code",[t._v("multipleOf")]),t._v(" keyword is validated by comparing the result of division with "),e("code",[t._v("parseInt()")]),t._v(" of that result. It works for dividers that are bigger than 1. For small dividers such as 0.01 the result of the division is usually not integer (even when it should be integer, see issue "),e("a",{attrs:{href:"https://github.com/ajv-validator/ajv/issues/84",target:"_blank",rel:"noopener noreferrer"}},[t._v("#84"),e("OutboundLink")],1),t._v("). If you need to use fractional dividers set this option to some positive integer N to have "),e("code",[t._v("multipleOf")]),t._v(" validated using this formula: "),e("code",[t._v("Math.abs(Math.round(division) - division) < 1e-N")]),t._v(" (it is slower but allows for float arithmetic deviations).")]),t._v(" "),e("h3",{attrs:{id:"messages"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#messages"}},[t._v("#")]),t._v(" messages")]),t._v(" "),e("p",[t._v("Include human-readable messages in errors. "),e("code",[t._v("true")]),t._v(" by default. "),e("code",[t._v("false")]),t._v(" can be passed when messages are generated outside of Ajv code (e.g. with "),e("a",{attrs:{href:"https://github.com/ajv-validator/ajv-i18n",target:"_blank",rel:"noopener noreferrer"}},[t._v("ajv-i18n"),e("OutboundLink")],1),t._v(").")]),t._v(" "),e("h3",{attrs:{id:"uriresolver"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#uriresolver"}},[t._v("#")]),t._v(" uriResolver")]),t._v(" "),e("p",[t._v("By default "),e("code",[t._v("uriResolver")]),t._v(" is undefined and relies on the embedded uriResolver "),e("a",{attrs:{href:"https://github.com/fastify/fast-uri",target:"_blank",rel:"noopener noreferrer"}},[t._v("fast-uri"),e("OutboundLink")],1),t._v(". Pass an object that satisfies the interface "),e("a",{attrs:{href:"https://github.com/ajv-validator/ajv/blob/master/lib/types/index.ts",target:"_blank",rel:"noopener noreferrer"}},[t._v("UriResolver"),e("OutboundLink")],1),t._v(" to be used in replacement. One alternative is "),e("a",{attrs:{href:"https://github.com/garycourt/uri-js",target:"_blank",rel:"noopener noreferrer"}},[t._v("uri-js"),e("OutboundLink")],1),t._v(".")]),t._v(" "),e("h3",{attrs:{id:"code"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#code"}},[t._v("#")]),t._v(" code "),e("Badge",{attrs:{text:"v7"}})],1),t._v(" "),e("p",[t._v("Code generation options:")]),t._v(" "),e("div",{staticClass:"language-typescript extra-class"},[e("pre",{pre:!0,attrs:{class:"language-typescript"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("type")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CodeOptions")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n es5"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("boolean")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v('// to generate es5 code - by default code is es6, with "for-of" loops, "let" and "const"')]),t._v("\n esm"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("boolean")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// how functions should be exported - by default CJS is used, so the validate function(s) ")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// file can be `required`. Set this value to true to export the validate function(s) as ES Modules, enabling ")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// bunlers to do their job.")]),t._v("\n lines"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("boolean")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// add line-breaks to code - to simplify debugging of generated functions")]),t._v("\n source"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("boolean")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// add `source` property (see Source below) to validating function.")]),t._v("\n process"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("code"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" schema"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" SchemaEnv"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// an optional function to process generated code")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// before it is passed to Function constructor.")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// It can be used to either beautify or to transpile code.")]),t._v("\n optimize"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("boolean")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("number")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// code optimization flag or number of passes, 1 pass by default,")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// code optimizations reduce the size of the generated code (bytes, based on the tests) by over 10%,")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// the number of code tree nodes by nearly 17%.")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// You would almost never need more than one optimization pass, unless you have some really complex schemas -")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// the second pass in the tests (it has quite complex schemas) only improves optimization by less than 0.1%.")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// See [Code optimization](./codegen.md#code-optimization) for details.")]),t._v("\n formats"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Code\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Code snippet created with `_` tagged template literal that contains all format definitions,")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// it can be the code of actual definitions or `require` call:")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v('// _`require("./my-formats")`')]),t._v("\n regExp"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" RegExpEngine\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Pass non-standard RegExp engine to mitigate ReDoS, e.g. node-re2.")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// During validation of a schema, code.regExp will be ")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// used to match strings against regular expressions.")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// The supplied function must support the interface:")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// regExp(regex, unicodeFlag).test(string) => boolean")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("type")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Source")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n code"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("string")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// unlike func.toString() it includes assignments external to function scope")]),t._v("\n scope"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Scope "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// see Code generation (TODO)")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])])}),[],!1,null,null,null);e.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/78.bbc865a6.js b/assets/js/78.bbc865a6.js new file mode 100644 index 000000000..46bf8da6c --- /dev/null +++ b/assets/js/78.bbc865a6.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[78],{428:function(t,a,e){"use strict";e.r(a);var s=e(14),r=Object(s.a)({},(function(){var t=this,a=t._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("p",[a("a",{attrs:{href:"https://github.com/ajv-validator/ajv-formats",target:"_blank",rel:"noopener noreferrer"}},[t._v("ajv-formats repository"),a("OutboundLink")],1)]),t._v(" "),a("h1",{attrs:{id:"ajv-formats"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#ajv-formats"}},[t._v("#")]),t._v(" ajv-formats")]),t._v(" "),a("p",[t._v("JSON Schema formats for Ajv")]),t._v(" "),a("p",[a("a",{attrs:{href:"https://travis-ci.org/ajv-validator/ajv-formats",target:"_blank",rel:"noopener noreferrer"}},[a("img",{attrs:{src:"https://travis-ci.org/ajv-validator/ajv-formats.svg?branch=master",alt:"Build Status"}}),a("OutboundLink")],1),t._v(" "),a("a",{attrs:{href:"https://www.npmjs.com/package/ajv-formats",target:"_blank",rel:"noopener noreferrer"}},[a("img",{attrs:{src:"https://img.shields.io/npm/v/ajv-formats.svg",alt:"npm"}}),a("OutboundLink")],1),t._v(" "),a("a",{attrs:{href:"https://gitter.im/ajv-validator/ajv",target:"_blank",rel:"noopener noreferrer"}},[a("img",{attrs:{src:"https://img.shields.io/gitter/room/ajv-validator/ajv.svg",alt:"Gitter"}}),a("OutboundLink")],1),t._v(" "),a("a",{attrs:{href:"https://github.com/sponsors/epoberezkin",target:"_blank",rel:"noopener noreferrer"}},[a("img",{attrs:{src:"https://img.shields.io/badge/$-sponsors-brightgreen",alt:"GitHub Sponsors"}}),a("OutboundLink")],1)]),t._v(" "),a("h2",{attrs:{id:"usage"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#usage"}},[t._v("#")]),t._v(" Usage")]),t._v(" "),a("div",{staticClass:"language-javascript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-javascript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// ESM/TypeScript import")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" Ajv "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ajv"')]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" addFormats "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ajv-formats"')]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Node.js require:")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" Ajv "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("require")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ajv"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" addFormats "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("require")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ajv-formats"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" ajv "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Ajv")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("addFormats")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ajv"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),a("h2",{attrs:{id:"formats"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#formats"}},[t._v("#")]),t._v(" Formats")]),t._v(" "),a("p",[t._v("The package defines these formats:")]),t._v(" "),a("ul",[a("li",[a("em",[t._v("date")]),t._v(": full-date according to "),a("a",{attrs:{href:"http://tools.ietf.org/html/rfc3339#section-5.6",target:"_blank",rel:"noopener noreferrer"}},[t._v("RFC3339"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("li",[a("em",[t._v("time")]),t._v(": time (time-zone is mandatory).")]),t._v(" "),a("li",[a("em",[t._v("date-time")]),t._v(": date-time (time-zone is mandatory).")]),t._v(" "),a("li",[a("em",[t._v("iso-time")]),t._v(": time with optional time-zone.")]),t._v(" "),a("li",[a("em",[t._v("iso-date-time")]),t._v(": date-time with optional time-zone.")]),t._v(" "),a("li",[a("em",[t._v("duration")]),t._v(": duration from "),a("a",{attrs:{href:"https://tools.ietf.org/html/rfc3339#appendix-A",target:"_blank",rel:"noopener noreferrer"}},[t._v("RFC3339"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("em",[t._v("uri")]),t._v(": full URI.")]),t._v(" "),a("li",[a("em",[t._v("uri-reference")]),t._v(": URI reference, including full and relative URIs.")]),t._v(" "),a("li",[a("em",[t._v("uri-template")]),t._v(": URI template according to "),a("a",{attrs:{href:"https://tools.ietf.org/html/rfc6570",target:"_blank",rel:"noopener noreferrer"}},[t._v("RFC6570"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("em",[t._v("url")]),t._v(" (deprecated): "),a("a",{attrs:{href:"https://url.spec.whatwg.org/#concept-url",target:"_blank",rel:"noopener noreferrer"}},[t._v("URL record"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("li",[a("em",[t._v("email")]),t._v(": email address.")]),t._v(" "),a("li",[a("em",[t._v("hostname")]),t._v(": host name according to "),a("a",{attrs:{href:"http://tools.ietf.org/html/rfc1034#section-3.5",target:"_blank",rel:"noopener noreferrer"}},[t._v("RFC1034"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("li",[a("em",[t._v("ipv4")]),t._v(": IP address v4.")]),t._v(" "),a("li",[a("em",[t._v("ipv6")]),t._v(": IP address v6.")]),t._v(" "),a("li",[a("em",[t._v("regex")]),t._v(": tests whether a string is a valid regular expression by passing it to RegExp constructor.")]),t._v(" "),a("li",[a("em",[t._v("uuid")]),t._v(": Universally Unique IDentifier according to "),a("a",{attrs:{href:"http://tools.ietf.org/html/rfc4122",target:"_blank",rel:"noopener noreferrer"}},[t._v("RFC4122"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("li",[a("em",[t._v("json-pointer")]),t._v(": JSON-pointer according to "),a("a",{attrs:{href:"https://tools.ietf.org/html/rfc6901",target:"_blank",rel:"noopener noreferrer"}},[t._v("RFC6901"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("li",[a("em",[t._v("relative-json-pointer")]),t._v(": relative JSON-pointer according to "),a("a",{attrs:{href:"http://tools.ietf.org/html/draft-luff-relative-json-pointer-00",target:"_blank",rel:"noopener noreferrer"}},[t._v("this draft"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("li",[a("em",[t._v("byte")]),t._v(": base64 encoded data according to the "),a("a",{attrs:{href:"https://spec.openapis.org/oas/v3.0.0#data-types",target:"_blank",rel:"noopener noreferrer"}},[t._v("openApi 3.0.0 specification"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("em",[t._v("int32")]),t._v(": signed 32 bits integer according to the "),a("a",{attrs:{href:"https://spec.openapis.org/oas/v3.0.0#data-types",target:"_blank",rel:"noopener noreferrer"}},[t._v("openApi 3.0.0 specification"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("em",[t._v("int64")]),t._v(": signed 64 bits according to the "),a("a",{attrs:{href:"https://spec.openapis.org/oas/v3.0.0#data-types",target:"_blank",rel:"noopener noreferrer"}},[t._v("openApi 3.0.0 specification"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("em",[t._v("float")]),t._v(": float according to the "),a("a",{attrs:{href:"https://spec.openapis.org/oas/v3.0.0#data-types",target:"_blank",rel:"noopener noreferrer"}},[t._v("openApi 3.0.0 specification"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("em",[t._v("double")]),t._v(": double according to the "),a("a",{attrs:{href:"https://spec.openapis.org/oas/v3.0.0#data-types",target:"_blank",rel:"noopener noreferrer"}},[t._v("openApi 3.0.0 specification"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("em",[t._v("password")]),t._v(": password string according to the "),a("a",{attrs:{href:"https://spec.openapis.org/oas/v3.0.0#data-types",target:"_blank",rel:"noopener noreferrer"}},[t._v("openApi 3.0.0 specification"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("em",[t._v("binary")]),t._v(": binary string according to the "),a("a",{attrs:{href:"https://spec.openapis.org/oas/v3.0.0#data-types",target:"_blank",rel:"noopener noreferrer"}},[t._v("openApi 3.0.0 specification"),a("OutboundLink")],1)])]),t._v(" "),a("p",[t._v("See regular expressions used for format validation and the sources that were used in "),a("a",{attrs:{href:"https://github.com/ajv-validator/ajv-formats/blob/master/src/formats.ts",target:"_blank",rel:"noopener noreferrer"}},[t._v("formats.ts"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("p",[a("strong",[t._v("Please note")]),t._v(": JSON Schema draft-07 also defines formats "),a("code",[t._v("iri")]),t._v(", "),a("code",[t._v("iri-reference")]),t._v(", "),a("code",[t._v("idn-hostname")]),t._v(" and "),a("code",[t._v("idn-email")]),t._v(" for URLs, hostnames and emails with international characters. These formats are available in "),a("a",{attrs:{href:"https://github.com/luzlab/ajv-formats-draft2019",target:"_blank",rel:"noopener noreferrer"}},[t._v("ajv-formats-draft2019"),a("OutboundLink")],1),t._v(" plugin.")]),t._v(" "),a("h2",{attrs:{id:"keywords-to-compare-values-formatmaximum-formatminimum-and-formatexclusivemaximum-formatexclusiveminimum"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#keywords-to-compare-values-formatmaximum-formatminimum-and-formatexclusivemaximum-formatexclusiveminimum"}},[t._v("#")]),t._v(" Keywords to compare values: "),a("code",[t._v("formatMaximum")]),t._v(" / "),a("code",[t._v("formatMinimum")]),t._v(" and "),a("code",[t._v("formatExclusiveMaximum")]),t._v(" / "),a("code",[t._v("formatExclusiveMinimum")])]),t._v(" "),a("p",[t._v("These keywords allow to define minimum/maximum constraints when the format keyword defines ordering ("),a("code",[t._v("compare")]),t._v(" function in format definition).")]),t._v(" "),a("p",[t._v("These keywords are added to ajv instance when ajv-formats is used without options or with option "),a("code",[t._v("keywords: true")]),t._v(".")]),t._v(" "),a("p",[t._v("These keywords apply only to strings. If the data is not a string, the validation succeeds.")]),t._v(" "),a("p",[t._v("The value of keywords "),a("code",[t._v("formatMaximum")]),t._v("/"),a("code",[t._v("formatMinimum")]),t._v(" and "),a("code",[t._v("formatExclusiveMaximum")]),t._v("/"),a("code",[t._v("formatExclusiveMinimum")]),t._v(" should be a string or "),a("a",{attrs:{href:"https://github.com/ajv-validator/ajv/blob/master/docs/guide/combining-schemas.md#data-reference",target:"_blank",rel:"noopener noreferrer"}},[t._v("$data reference"),a("OutboundLink")],1),t._v(". This value is the maximum (minimum) allowed value for the data to be valid as determined by "),a("code",[t._v("format")]),t._v(" keyword. If "),a("code",[t._v("format")]),t._v(" keyword is not present schema compilation will throw exception.")]),t._v(" "),a("p",[t._v("When these keyword are added, they also add comparison functions to formats "),a("code",[t._v('"date"')]),t._v(", "),a("code",[t._v('"time"')]),t._v(" and "),a("code",[t._v('"date-time"')]),t._v(". User-defined formats also can have comparison functions. See "),a("a",{attrs:{href:"https://github.com/ajv-validator/ajv/blob/master/docs/api.md#api-addformat",target:"_blank",rel:"noopener noreferrer"}},[t._v("addFormat"),a("OutboundLink")],1),t._v(" method.")]),t._v(" "),a("div",{staticClass:"language-javascript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-javascript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("require")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ajv-formats"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ajv"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" schema "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"string"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("format")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"date"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("formatMinimum")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"2016-02-06"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("formatExclusiveMaximum")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"2016-12-27"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" validDataList "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"2016-02-06"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"2016-12-26"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" invalidDataList "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"2016-02-05"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"2016-12-27"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"abc"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n")])])]),a("h2",{attrs:{id:"options"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#options"}},[t._v("#")]),t._v(" Options")]),t._v(" "),a("p",[t._v("Options can be passed via the second parameter. Options value can be")]),t._v(" "),a("ol",[a("li",[t._v("The list of format names that will be added to ajv instance:")])]),t._v(" "),a("div",{staticClass:"language-javascript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-javascript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("addFormats")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ajv"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"date"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"time"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),a("p",[a("strong",[t._v("Please note")]),t._v(": when ajv encounters an undefined format it throws exception (unless ajv instance was configured with "),a("code",[t._v("strict: false")]),t._v(" option). To allow specific undefined formats they have to be passed to ajv instance via "),a("code",[t._v("formats")]),t._v(" option with "),a("code",[t._v("true")]),t._v(" value:")]),t._v(" "),a("div",{staticClass:"language-javascript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-javascript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" ajv "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Ajv")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("formats")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("date")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("time")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v('// to ignore "date" and "time" formats in schemas.')]),t._v("\n")])])]),a("ol",{attrs:{start:"2"}},[a("li",[t._v("Format validation mode (default is "),a("code",[t._v('"full"')]),t._v(") with optional list of format names and "),a("code",[t._v("keywords")]),t._v(" option to add additional format comparison keywords:")])]),t._v(" "),a("div",{staticClass:"language-javascript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-javascript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("addFormats")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ajv"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("mode")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"fast"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),a("p",[t._v("or")]),t._v(" "),a("div",{staticClass:"language-javascript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-javascript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("addFormats")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ajv"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("mode")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"fast"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("formats")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"date"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"time"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("keywords")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),a("p",[t._v("In "),a("code",[t._v('"fast"')]),t._v(" mode the following formats are simplified: "),a("code",[t._v('"date"')]),t._v(", "),a("code",[t._v('"time"')]),t._v(", "),a("code",[t._v('"date-time"')]),t._v(", "),a("code",[t._v('"iso-time"')]),t._v(", "),a("code",[t._v('"iso-date-time"')]),t._v(", "),a("code",[t._v('"uri"')]),t._v(", "),a("code",[t._v('"uri-reference"')]),t._v(", "),a("code",[t._v('"email"')]),t._v(". For example, "),a("code",[t._v('"date"')]),t._v(", "),a("code",[t._v('"time"')]),t._v(" and "),a("code",[t._v('"date-time"')]),t._v(" do not validate ranges in "),a("code",[t._v('"fast"')]),t._v(" mode, only string structure, and other formats have simplified regular expressions.")]),t._v(" "),a("h2",{attrs:{id:"tests"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#tests"}},[t._v("#")]),t._v(" Tests")]),t._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("npm")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("git")]),t._v(" submodule update "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--init")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("npm")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("test")]),t._v("\n")])])]),a("h2",{attrs:{id:"license"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#license"}},[t._v("#")]),t._v(" License")]),t._v(" "),a("p",[a("a",{attrs:{href:"https://github.com/ajv-validator/ajv-formats/blob/master/LICENSE",target:"_blank",rel:"noopener noreferrer"}},[t._v("MIT"),a("OutboundLink")],1)])])}),[],!1,null,null,null);a.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/app.a90f783e.js b/assets/js/app.a90f783e.js new file mode 100644 index 000000000..c5dc576eb --- /dev/null +++ b/assets/js/app.a90f783e.js @@ -0,0 +1,16 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[0],[]]);!function(e){function t(t){for(var r,a,s=t[0],l=t[1],c=t[2],f=0,p=[];f

'};function o(e,t,n){return en?n:e}function i(e){return 100*(-1+e)}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=o(e,r.minimum,1),n.status=1===e?null:e;var l=n.render(!t),c=l.querySelector(r.barSelector),u=r.speed,f=r.easing;return l.offsetWidth,a((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(c,function(e,t,n){var o;return(o="translate3d"===r.positionUsing?{transform:"translate3d("+i(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+i(e)+"%,0)"}:{"margin-left":i(e)+"%"}).transition="all "+t+"ms "+n,o}(e,u,f)),1===e?(s(l,{transition:"none",opacity:1}),l.offsetWidth,setTimeout((function(){s(l,{transition:"all "+u+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),u)}),u)):setTimeout(t,u)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*o(Math.random()*t,.1,.95)),t=o(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");c(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var o,a=t.querySelector(r.barSelector),l=e?"-100":i(n.status||0),u=document.querySelector(r.parent);return s(a,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(o=t.querySelector(r.spinnerSelector))&&p(o),u!=document.body&&c(u,"nprogress-custom-parent"),u.appendChild(t),t},n.remove=function(){u(document.documentElement,"nprogress-busy"),u(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&p(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var a=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=function(){var e=["Webkit","O","Moz","ms"],t={};function n(n){return n=n.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()})),t[n]||(t[n]=function(t){var n=document.body.style;if(t in n)return t;for(var r,o=e.length,i=t.charAt(0).toUpperCase()+t.slice(1);o--;)if((r=e[o]+i)in n)return r;return t}(n))}function r(e,t,r){t=n(t),e.style[t]=r}return function(e,t){var n,o,i=arguments;if(2==i.length)for(n in t)void 0!==(o=t[n])&&t.hasOwnProperty(n)&&r(e,n,o);else r(e,i[1],i[2])}}();function l(e,t){return("string"==typeof e?e:f(e)).indexOf(" "+t+" ")>=0}function c(e,t){var n=f(e),r=n+t;l(n,t)||(e.className=r.substring(1))}function u(e,t){var n,r=f(e);l(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function f(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function p(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n})?r.call(t,n,t,e):r)||(e.exports=o)},function(e,t,n){"use strict";var r=n(0),o=n(45).f,i=n(12),a=n(90),s=n(33),l=n(60),c=n(118);e.exports=function(e,t){var n,u,f,p,d,v=e.target,h=e.global,m=e.stat;if(n=h?r:m?r[v]||s(v,{}):r[v]&&r[v].prototype)for(u in t){if(p=t[u],f=e.dontCallGetSet?(d=o(n,u))&&d.value:n[u],!c(h?u:v+(m?".":"#")+u,e.forced)&&void 0!==f){if(typeof p==typeof f)continue;l(p,f)}(e.sham||f&&f.sham)&&i(p,"sham",!0),a(n,u,p,e)}}},function(e,t,n){"use strict";var r=n(25),o=Function.prototype.call;e.exports=r?o.bind(o):function(){return o.apply(o,arguments)}},function(e,t,n){"use strict";var r=n(3);e.exports=!r((function(){var e=function(){}.bind();return"function"!=typeof e||e.hasOwnProperty("prototype")}))},function(e,t,n){"use strict";e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t,n){"use strict";var r=n(46),o=n(28);e.exports=function(e){return r(o(e))}},function(e,t,n){"use strict";var r=n(47),o=TypeError;e.exports=function(e){if(r(e))throw new o("Can't call method on "+e);return e}},function(e,t,n){"use strict";var r=n(0),o=n(1),i=function(e){return o(e)?e:void 0};e.exports=function(e,t){return arguments.length<2?i(r[e]):r[e]&&r[e][t]}},function(e,t,n){"use strict";var r=n(1),o=n(100),i=TypeError;e.exports=function(e){if(r(e))return e;throw new i(o(e)+" is not a function")}},function(e,t,n){"use strict";var r=n(0),o=n(54),i=n(8),a=n(56),s=n(52),l=n(51),c=r.Symbol,u=o("wks"),f=l?c.for||c:c&&c.withoutSetter||a;e.exports=function(e){return i(u,e)||(u[e]=s&&i(c,e)?c[e]:f("Symbol."+e)),u[e]}},function(e,t,n){"use strict";var r=n(55),o=n(0),i=n(33),a=e.exports=o["__core-js_shared__"]||i("__core-js_shared__",{});(a.versions||(a.versions=[])).push({version:"3.37.1",mode:r?"pure":"global",copyright:"© 2014-2024 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.37.1/LICENSE",source:"https://github.com/zloirock/core-js"})},function(e,t,n){"use strict";var r=n(0),o=Object.defineProperty;e.exports=function(e,t){try{o(r,e,{value:t,configurable:!0,writable:!0})}catch(n){r[e]=t}return t}},function(e,t,n){"use strict";var r=n(28),o=Object;e.exports=function(e){return o(r(e))}},function(e,t,n){"use strict";var r=n(115);e.exports=function(e){return r(e.length)}},function(e,t,n){var r=n(142),o=n(10),i=Object.prototype,a=i.hasOwnProperty,s=i.propertyIsEnumerable,l=r(function(){return arguments}())?r:function(e){return o(e)&&a.call(e,"callee")&&!s.call(e,"callee")};e.exports=l},function(e,t,n){var r=n(9)(n(7),"Map");e.exports=r},function(e,t){e.exports=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}},function(e,t,n){var r=n(162),o=n(169),i=n(171),a=n(172),s=n(173);function l(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t-1&&e%1==0&&e<=9007199254740991}},function(e,t,n){var r=n(4),o=n(43),i=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,a=/^\w*$/;e.exports=function(e,t){if(r(e))return!1;var n=typeof e;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=e&&!o(e))||(a.test(e)||!i.test(e)||null!=t&&e in Object(t))}},function(e,t,n){var r=n(11),o=n(10);e.exports=function(e){return"symbol"==typeof e||o(e)&&"[object Symbol]"==r(e)}},function(e,t){e.exports=function(e){return e}},function(e,t,n){"use strict";var r=n(5),o=n(24),i=n(96),a=n(26),s=n(27),l=n(48),c=n(8),u=n(57),f=Object.getOwnPropertyDescriptor;t.f=r?f:function(e,t){if(e=s(e),t=l(t),u)try{return f(e,t)}catch(e){}if(c(e,t))return a(!o(i.f,e,t),e[t])}},function(e,t,n){"use strict";var r=n(2),o=n(3),i=n(16),a=Object,s=r("".split);e.exports=o((function(){return!a("z").propertyIsEnumerable(0)}))?function(e){return"String"===i(e)?s(e,""):a(e)}:a},function(e,t,n){"use strict";e.exports=function(e){return null==e}},function(e,t,n){"use strict";var r=n(97),o=n(49);e.exports=function(e){var t=r(e,"string");return o(t)?t:t+""}},function(e,t,n){"use strict";var r=n(29),o=n(1),i=n(50),a=n(51),s=Object;e.exports=a?function(e){return"symbol"==typeof e}:function(e){var t=r("Symbol");return o(t)&&i(t.prototype,s(e))}},function(e,t,n){"use strict";var r=n(2);e.exports=r({}.isPrototypeOf)},function(e,t,n){"use strict";var r=n(52);e.exports=r&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},function(e,t,n){"use strict";var r=n(53),o=n(3),i=n(0).String;e.exports=!!Object.getOwnPropertySymbols&&!o((function(){var e=Symbol("symbol detection");return!i(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&r&&r<41}))},function(e,t,n){"use strict";var r,o,i=n(0),a=n(98),s=i.process,l=i.Deno,c=s&&s.versions||l&&l.version,u=c&&c.v8;u&&(o=(r=u.split("."))[0]>0&&r[0]<4?1:+(r[0]+r[1])),!o&&a&&(!(r=a.match(/Edge\/(\d+)/))||r[1]>=74)&&(r=a.match(/Chrome\/(\d+)/))&&(o=+r[1]),e.exports=o},function(e,t,n){"use strict";var r=n(32);e.exports=function(e,t){return r[e]||(r[e]=t||{})}},function(e,t,n){"use strict";e.exports=!1},function(e,t,n){"use strict";var r=n(2),o=0,i=Math.random(),a=r(1..toString);e.exports=function(e){return"Symbol("+(void 0===e?"":e)+")_"+a(++o+i,36)}},function(e,t,n){"use strict";var r=n(5),o=n(3),i=n(102);e.exports=!r&&!o((function(){return 7!==Object.defineProperty(i("div"),"a",{get:function(){return 7}}).a}))},function(e,t,n){"use strict";var r=n(6),o=String,i=TypeError;e.exports=function(e){if(r(e))return e;throw new i(o(e)+" is not an object")}},function(e,t,n){"use strict";e.exports={}},function(e,t,n){"use strict";var r=n(8),o=n(109),i=n(45),a=n(15);e.exports=function(e,t,n){for(var s=o(t),l=a.f,c=i.f,u=0;uu))return!1;var p=l.get(e),d=l.get(t);if(p&&d)return p==t&&d==e;var v=-1,h=!0,m=2&n?new r:void 0;for(l.set(e,t),l.set(t,e);++v-1&&e%1==0&&e]/;e.exports=function(e){var t,n=""+e,o=r.exec(n);if(!o)return n;var i="",a=0,s=0;for(a=o.index;a79&&a<83||!i("reduce")},{reduce:function(e){var t=arguments.length;return o(this,e,t,t>1?arguments[1]:void 0)}})},function(e,t,n){"use strict";var r={}.propertyIsEnumerable,o=Object.getOwnPropertyDescriptor,i=o&&!r.call({1:2},1);t.f=i?function(e){var t=o(this,e);return!!t&&t.enumerable}:r},function(e,t,n){"use strict";var r=n(24),o=n(6),i=n(49),a=n(99),s=n(101),l=n(31),c=TypeError,u=l("toPrimitive");e.exports=function(e,t){if(!o(e)||i(e))return e;var n,l=a(e,u);if(l){if(void 0===t&&(t="default"),n=r(l,e,t),!o(n)||i(n))return n;throw new c("Can't convert object to primitive value")}return void 0===t&&(t="number"),s(e,t)}},function(e,t,n){"use strict";e.exports="undefined"!=typeof navigator&&String(navigator.userAgent)||""},function(e,t,n){"use strict";var r=n(30),o=n(47);e.exports=function(e,t){var n=e[t];return o(n)?void 0:r(n)}},function(e,t,n){"use strict";var r=String;e.exports=function(e){try{return r(e)}catch(e){return"Object"}}},function(e,t,n){"use strict";var r=n(24),o=n(1),i=n(6),a=TypeError;e.exports=function(e,t){var n,s;if("string"===t&&o(n=e.toString)&&!i(s=r(n,e)))return s;if(o(n=e.valueOf)&&!i(s=r(n,e)))return s;if("string"!==t&&o(n=e.toString)&&!i(s=r(n,e)))return s;throw new a("Can't convert object to primitive value")}},function(e,t,n){"use strict";var r=n(0),o=n(6),i=r.document,a=o(i)&&o(i.createElement);e.exports=function(e){return a?i.createElement(e):{}}},function(e,t,n){"use strict";var r=n(5),o=n(3);e.exports=r&&o((function(){return 42!==Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype}))},function(e,t,n){"use strict";var r=n(5),o=n(8),i=Function.prototype,a=r&&Object.getOwnPropertyDescriptor,s=o(i,"name"),l=s&&"something"===function(){}.name,c=s&&(!r||r&&a(i,"name").configurable);e.exports={EXISTS:s,PROPER:l,CONFIGURABLE:c}},function(e,t,n){"use strict";var r=n(2),o=n(1),i=n(32),a=r(Function.toString);o(i.inspectSource)||(i.inspectSource=function(e){return a(e)}),e.exports=i.inspectSource},function(e,t,n){"use strict";var r,o,i,a=n(107),s=n(0),l=n(6),c=n(12),u=n(8),f=n(32),p=n(108),d=n(59),v=s.TypeError,h=s.WeakMap;if(a||f.state){var m=f.state||(f.state=new h);m.get=m.get,m.has=m.has,m.set=m.set,r=function(e,t){if(m.has(e))throw new v("Object already initialized");return t.facade=e,m.set(e,t),t},o=function(e){return m.get(e)||{}},i=function(e){return m.has(e)}}else{var g=p("state");d[g]=!0,r=function(e,t){if(u(e,g))throw new v("Object already initialized");return t.facade=e,c(e,g,t),t},o=function(e){return u(e,g)?e[g]:{}},i=function(e){return u(e,g)}}e.exports={set:r,get:o,has:i,enforce:function(e){return i(e)?o(e):r(e,{})},getterFor:function(e){return function(t){var n;if(!l(t)||(n=o(t)).type!==e)throw new v("Incompatible receiver, "+e+" required");return n}}}},function(e,t,n){"use strict";var r=n(0),o=n(1),i=r.WeakMap;e.exports=o(i)&&/native code/.test(String(i))},function(e,t,n){"use strict";var r=n(54),o=n(56),i=r("keys");e.exports=function(e){return i[e]||(i[e]=o(e))}},function(e,t,n){"use strict";var r=n(29),o=n(2),i=n(110),a=n(117),s=n(58),l=o([].concat);e.exports=r("Reflect","ownKeys")||function(e){var t=i.f(s(e)),n=a.f;return n?l(t,n(e)):t}},function(e,t,n){"use strict";var r=n(111),o=n(116).concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return r(e,o)}},function(e,t,n){"use strict";var r=n(2),o=n(8),i=n(27),a=n(112).indexOf,s=n(59),l=r([].push);e.exports=function(e,t){var n,r=i(e),c=0,u=[];for(n in r)!o(s,n)&&o(r,n)&&l(u,n);for(;t.length>c;)o(r,n=t[c++])&&(~a(u,n)||l(u,n));return u}},function(e,t,n){"use strict";var r=n(27),o=n(113),i=n(35),a=function(e){return function(t,n,a){var s=r(t),l=i(s);if(0===l)return!e&&-1;var c,u=o(a,l);if(e&&n!=n){for(;l>u;)if((c=s[u++])!=c)return!0}else for(;l>u;u++)if((e||u in s)&&s[u]===n)return e||u||0;return!e&&-1}};e.exports={includes:a(!0),indexOf:a(!1)}},function(e,t,n){"use strict";var r=n(61),o=Math.max,i=Math.min;e.exports=function(e,t){var n=r(e);return n<0?o(n+t,0):i(n,t)}},function(e,t,n){"use strict";var r=Math.ceil,o=Math.floor;e.exports=Math.trunc||function(e){var t=+e;return(t>0?o:r)(t)}},function(e,t,n){"use strict";var r=n(61),o=Math.min;e.exports=function(e){var t=r(e);return t>0?o(t,9007199254740991):0}},function(e,t,n){"use strict";e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},function(e,t,n){"use strict";t.f=Object.getOwnPropertySymbols},function(e,t,n){"use strict";var r=n(3),o=n(1),i=/#|\.prototype\./,a=function(e,t){var n=l[s(e)];return n===u||n!==c&&(o(t)?r(t):!!t)},s=a.normalize=function(e){return String(e).replace(i,".").toLowerCase()},l=a.data={},c=a.NATIVE="N",u=a.POLYFILL="P";e.exports=a},function(e,t,n){"use strict";var r=n(30),o=n(34),i=n(46),a=n(35),s=TypeError,l="Reduce of empty array with no initial value",c=function(e){return function(t,n,c,u){var f=o(t),p=i(f),d=a(f);if(r(n),0===d&&c<2)throw new s(l);var v=e?d-1:0,h=e?-1:1;if(c<2)for(;;){if(v in p){u=p[v],v+=h;break}if(v+=h,e?v<0:d<=v)throw new s(l)}for(;e?v>=0:d>v;v+=h)v in p&&(u=n(u,p[v],v,f));return u}};e.exports={left:c(!1),right:c(!0)}},function(e,t,n){"use strict";var r=n(3);e.exports=function(e,t){var n=[][e];return!!n&&r((function(){n.call(null,t||function(){return 1},1)}))}},function(e,t,n){"use strict";var r=n(0),o=n(16);e.exports="process"===o(r.process)},function(e,t,n){"use strict";var r=n(23),o=n(0),i=n(123),a=n(124),s=o.WebAssembly,l=7!==new Error("e",{cause:7}).cause,c=function(e,t){var n={};n[e]=a(e,t,l),r({global:!0,constructor:!0,arity:1,forced:l},n)},u=function(e,t){if(s&&s[e]){var n={};n[e]=a("WebAssembly."+e,t,l),r({target:"WebAssembly",stat:!0,constructor:!0,arity:1,forced:l},n)}};c("Error",(function(e){return function(t){return i(e,this,arguments)}})),c("EvalError",(function(e){return function(t){return i(e,this,arguments)}})),c("RangeError",(function(e){return function(t){return i(e,this,arguments)}})),c("ReferenceError",(function(e){return function(t){return i(e,this,arguments)}})),c("SyntaxError",(function(e){return function(t){return i(e,this,arguments)}})),c("TypeError",(function(e){return function(t){return i(e,this,arguments)}})),c("URIError",(function(e){return function(t){return i(e,this,arguments)}})),u("CompileError",(function(e){return function(t){return i(e,this,arguments)}})),u("LinkError",(function(e){return function(t){return i(e,this,arguments)}})),u("RuntimeError",(function(e){return function(t){return i(e,this,arguments)}}))},function(e,t,n){"use strict";var r=n(25),o=Function.prototype,i=o.apply,a=o.call;e.exports="object"==typeof Reflect&&Reflect.apply||(r?a.bind(i):function(){return a.apply(i,arguments)})},function(e,t,n){"use strict";var r=n(29),o=n(8),i=n(12),a=n(50),s=n(62),l=n(60),c=n(128),u=n(129),f=n(130),p=n(133),d=n(134),v=n(5),h=n(55);e.exports=function(e,t,n,m){var g=m?2:1,y=e.split("."),b=y[y.length-1],_=r.apply(null,y);if(_){var w=_.prototype;if(!h&&o(w,"cause")&&delete w.cause,!n)return _;var x=r("Error"),j=t((function(e,t){var n=f(m?t:e,void 0),r=m?new _(e):new _;return void 0!==n&&i(r,"message",n),d(r,j,r.stack,2),this&&a(w,this)&&u(r,this,j),arguments.length>g&&p(r,arguments[g]),r}));if(j.prototype=w,"Error"!==b?s?s(j,x):l(j,x,{name:!0}):v&&"stackTraceLimit"in _&&(c(j,_,"stackTraceLimit"),c(j,_,"prepareStackTrace")),l(j,_),!h)try{w.name!==b&&i(w,"name",b),w.constructor=j}catch(e){}return j}}},function(e,t,n){"use strict";var r=n(2),o=n(30);e.exports=function(e,t,n){try{return r(o(Object.getOwnPropertyDescriptor(e,t)[n]))}catch(e){}}},function(e,t,n){"use strict";var r=n(127),o=String,i=TypeError;e.exports=function(e){if(r(e))return e;throw new i("Can't set "+o(e)+" as a prototype")}},function(e,t,n){"use strict";var r=n(6);e.exports=function(e){return r(e)||null===e}},function(e,t,n){"use strict";var r=n(15).f;e.exports=function(e,t,n){n in e||r(e,n,{configurable:!0,get:function(){return t[n]},set:function(e){t[n]=e}})}},function(e,t,n){"use strict";var r=n(1),o=n(6),i=n(62);e.exports=function(e,t,n){var a,s;return i&&r(a=t.constructor)&&a!==n&&o(s=a.prototype)&&s!==n.prototype&&i(e,s),e}},function(e,t,n){"use strict";var r=n(91);e.exports=function(e,t){return void 0===e?arguments.length<2?"":t:r(e)}},function(e,t,n){"use strict";var r=n(132),o=n(1),i=n(16),a=n(31)("toStringTag"),s=Object,l="Arguments"===i(function(){return arguments}());e.exports=r?i:function(e){var t,n,r;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=s(e),a))?n:l?i(t):"Object"===(r=i(t))&&o(t.callee)?"Arguments":r}},function(e,t,n){"use strict";var r={};r[n(31)("toStringTag")]="z",e.exports="[object z]"===String(r)},function(e,t,n){"use strict";var r=n(6),o=n(12);e.exports=function(e,t){r(t)&&"cause"in t&&o(e,"cause",t.cause)}},function(e,t,n){"use strict";var r=n(12),o=n(135),i=n(136),a=Error.captureStackTrace;e.exports=function(e,t,n,s){i&&(a?a(e,t):r(e,"stack",o(n,s)))}},function(e,t,n){"use strict";var r=n(2),o=Error,i=r("".replace),a=String(new o("zxcasd").stack),s=/\n\s*at [^:]*:[^\n]*/,l=s.test(a);e.exports=function(e,t){if(l&&"string"==typeof e&&!o.prepareStackTrace)for(;t--;)e=i(e,s,"");return e}},function(e,t,n){"use strict";var r=n(3),o=n(26);e.exports=!r((function(){var e=new Error("a");return!("stack"in e)||(Object.defineProperty(e,"stack",o(1,7)),7!==e.stack)}))},function(e,t,n){"use strict";var r=n(5),o=n(138),i=TypeError,a=Object.getOwnPropertyDescriptor,s=r&&!function(){if(void 0!==this)return!0;try{Object.defineProperty([],"length",{writable:!1}).length=1}catch(e){return e instanceof TypeError}}();e.exports=s?function(e,t){if(o(e)&&!a(e,"length").writable)throw new i("Cannot set read only .length");return e.length=t}:function(e,t){return e.length=t}},function(e,t,n){"use strict";var r=n(16);e.exports=Array.isArray||function(e){return"Array"===r(e)}},function(e,t,n){"use strict";var r=TypeError;e.exports=function(e){if(e>9007199254740991)throw r("Maximum allowed index exceeded");return e}},function(e,t,n){var r=n(63),o=n(141);e.exports=function e(t,n,i,a,s){var l=-1,c=t.length;for(i||(i=o),s||(s=[]);++l0&&i(u)?n>1?e(u,n-1,i,a,s):r(s,u):a||(s[s.length]=u)}return s}},function(e,t,n){var r=n(13),o=n(36),i=n(4),a=r?r.isConcatSpreadable:void 0;e.exports=function(e){return i(e)||o(e)||!!(a&&e&&e[a])}},function(e,t,n){var r=n(11),o=n(10);e.exports=function(e){return o(e)&&"[object Arguments]"==r(e)}},function(e,t,n){var r=n(13),o=Object.prototype,i=o.hasOwnProperty,a=o.toString,s=r?r.toStringTag:void 0;e.exports=function(e){var t=i.call(e,s),n=e[s];try{e[s]=void 0;var r=!0}catch(e){}var o=a.call(e);return r&&(t?e[s]=n:delete e[s]),o}},function(e,t){var n=Object.prototype.toString;e.exports=function(e){return n.call(e)}},function(e,t,n){var r=n(146),o=n(202),i=n(44),a=n(4),s=n(212);e.exports=function(e){return"function"==typeof e?e:null==e?i:"object"==typeof e?a(e)?o(e[0],e[1]):r(e):s(e)}},function(e,t,n){var r=n(147),o=n(201),i=n(81);e.exports=function(e){var t=o(e);return 1==t.length&&t[0][2]?i(t[0][0],t[0][1]):function(n){return n===e||r(n,e,t)}}},function(e,t,n){var r=n(65),o=n(69);e.exports=function(e,t,n,i){var a=n.length,s=a,l=!i;if(null==e)return!s;for(e=Object(e);a--;){var c=n[a];if(l&&c[2]?c[1]!==e[c[0]]:!(c[0]in e))return!1}for(;++a-1}},function(e,t,n){var r=n(18);e.exports=function(e,t){var n=this.__data__,o=r(n,e);return o<0?(++this.size,n.push([e,t])):n[o][1]=t,this}},function(e,t,n){var r=n(17);e.exports=function(){this.__data__=new r,this.size=0}},function(e,t){e.exports=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}},function(e,t){e.exports=function(e){return this.__data__.get(e)}},function(e,t){e.exports=function(e){return this.__data__.has(e)}},function(e,t,n){var r=n(17),o=n(37),i=n(39);e.exports=function(e,t){var n=this.__data__;if(n instanceof r){var a=n.__data__;if(!o||a.length<199)return a.push([e,t]),this.size=++n.size,this;n=this.__data__=new i(a)}return n.set(e,t),this.size=n.size,this}},function(e,t,n){var r=n(67),o=n(159),i=n(38),a=n(68),s=/^\[object .+?Constructor\]$/,l=Function.prototype,c=Object.prototype,u=l.toString,f=c.hasOwnProperty,p=RegExp("^"+u.call(f).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");e.exports=function(e){return!(!i(e)||o(e))&&(r(e)?p:s).test(a(e))}},function(e,t,n){var r,o=n(160),i=(r=/[^.]+$/.exec(o&&o.keys&&o.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"";e.exports=function(e){return!!i&&i in e}},function(e,t,n){var r=n(7)["__core-js_shared__"];e.exports=r},function(e,t){e.exports=function(e,t){return null==e?void 0:e[t]}},function(e,t,n){var r=n(163),o=n(17),i=n(37);e.exports=function(){this.size=0,this.__data__={hash:new r,map:new(i||o),string:new r}}},function(e,t,n){var r=n(164),o=n(165),i=n(166),a=n(167),s=n(168);function l(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}},function(e,t,n){var r=n(71),o=n(224),i=n(229),a=n(72),s=n(230),l=n(40);e.exports=function(e,t,n){var c=-1,u=o,f=e.length,p=!0,d=[],v=d;if(n)p=!1,u=i;else if(f>=200){var h=t?null:s(e);if(h)return l(h);p=!1,u=a,v=new r}else v=t?[]:d;e:for(;++c-1}},function(e,t,n){var r=n(226),o=n(227),i=n(228);e.exports=function(e,t,n){return t==t?i(e,t,n):r(e,o,n)}},function(e,t){e.exports=function(e,t,n,r){for(var o=e.length,i=n+(r?1:-1);r?i--:++i=0&&Math.floor(t)===t&&isFinite(e)}function h(e){return a(e)&&"function"==typeof e.then&&"function"==typeof e.catch}function m(e){return null==e?"":Array.isArray(e)||p(e)&&e.toString===f?JSON.stringify(e,g,2):String(e)}function g(e,t){return t&&t.__v_isRef?t.value:t}function y(e){var t=parseFloat(e);return isNaN(t)?e:t}function b(e,t){for(var n=Object.create(null),r=e.split(","),o=0;o-1)return e.splice(r,1)}}var x=Object.prototype.hasOwnProperty;function j(e,t){return x.call(e,t)}function k(e){var t=Object.create(null);return function(n){return t[n]||(t[n]=e(n))}}var S=/-(\w)/g,O=k((function(e){return e.replace(S,(function(e,t){return t?t.toUpperCase():""}))})),C=k((function(e){return e.charAt(0).toUpperCase()+e.slice(1)})),P=/\B([A-Z])/g,$=k((function(e){return e.replace(P,"-$1").toLowerCase()}));var E=Function.prototype.bind?function(e,t){return e.bind(t)}:function(e,t){function n(n){var r=arguments.length;return r?r>1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length=e.length,n};function A(e,t){t=t||0;for(var n=e.length-t,r=new Array(n);n--;)r[n]=e[n+t];return r}function T(e,t){for(var n in t)e[n]=t[n];return e}function L(e){for(var t={},n=0;n0,Y=Z&&Z.indexOf("edge/")>0;Z&&Z.indexOf("android");var ee=Z&&/iphone|ipad|ipod|ios/.test(Z);Z&&/chrome\/\d+/.test(Z),Z&&/phantomjs/.test(Z);var te,ne=Z&&Z.match(/firefox\/(\d+)/),re={}.watch,oe=!1;if(G)try{var ie={};Object.defineProperty(ie,"passive",{get:function(){oe=!0}}),window.addEventListener("test-passive",null,ie)}catch(e){}var ae=function(){return void 0===te&&(te=!G&&"undefined"!=typeof global&&(global.process&&"server"===global.process.env.VUE_ENV)),te},se=G&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function le(e){return"function"==typeof e&&/native code/.test(e.toString())}var ce,ue="undefined"!=typeof Symbol&&le(Symbol)&&"undefined"!=typeof Reflect&&le(Reflect.ownKeys);ce="undefined"!=typeof Set&&le(Set)?Set:function(){function e(){this.set=Object.create(null)}return e.prototype.has=function(e){return!0===this.set[e]},e.prototype.add=function(e){this.set[e]=!0},e.prototype.clear=function(){this.set=Object.create(null)},e}();var fe=null;function pe(e){void 0===e&&(e=null),e||fe&&fe._scope.off(),fe=e,e&&e._scope.on()}var de=function(){function e(e,t,n,r,o,i,a,s){this.tag=e,this.data=t,this.children=n,this.text=r,this.elm=o,this.ns=void 0,this.context=i,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=t&&t.key,this.componentOptions=a,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=s,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1}return Object.defineProperty(e.prototype,"child",{get:function(){return this.componentInstance},enumerable:!1,configurable:!0}),e}(),ve=function(e){void 0===e&&(e="");var t=new de;return t.text=e,t.isComment=!0,t};function he(e){return new de(void 0,void 0,void 0,String(e))}function me(e){var t=new de(e.tag,e.data,e.children&&e.children.slice(),e.text,e.elm,e.context,e.componentOptions,e.asyncFactory);return t.ns=e.ns,t.isStatic=e.isStatic,t.key=e.key,t.isComment=e.isComment,t.fnContext=e.fnContext,t.fnOptions=e.fnOptions,t.fnScopeId=e.fnScopeId,t.asyncMeta=e.asyncMeta,t.isCloned=!0,t}"function"==typeof SuppressedError&&SuppressedError;var ge=0,ye=[],be=function(){function e(){this._pending=!1,this.id=ge++,this.subs=[]}return e.prototype.addSub=function(e){this.subs.push(e)},e.prototype.removeSub=function(e){this.subs[this.subs.indexOf(e)]=null,this._pending||(this._pending=!0,ye.push(this))},e.prototype.depend=function(t){e.target&&e.target.addDep(this)},e.prototype.notify=function(e){var t=this.subs.filter((function(e){return e}));for(var n=0,r=t.length;n0&&(Ze((c=e(c,"".concat(n||"","_").concat(r)))[0])&&Ze(f)&&(p[u]=he(f.text+c[0].text),c.shift()),p.push.apply(p,c)):l(c)?Ze(f)?p[u]=he(f.text+c):""!==c&&p.push(he(c)):Ze(c)&&Ze(f)?p[u]=he(f.text+c.text):(s(t._isVList)&&a(c.tag)&&i(c.key)&&a(n)&&(c.key="__vlist".concat(n,"_").concat(r,"__")),p.push(c)));return p}(e):void 0}function Ze(e){return a(e)&&a(e.text)&&!1===e.isComment}function Xe(e,t){var n,r,i,s,l=null;if(o(e)||"string"==typeof e)for(l=new Array(e.length),n=0,r=e.length;n0,s=t?!!t.$stable:!a,l=t&&t.$key;if(t){if(t._normalized)return t._normalized;if(s&&o&&o!==r&&l===o.$key&&!a&&!o.$hasNormal)return o;for(var c in i={},t)t[c]&&"$"!==c[0]&&(i[c]=mt(e,n,c,t[c]))}else i={};for(var u in n)u in i||(i[u]=gt(n,u));return t&&Object.isExtensible(t)&&(t._normalized=i),H(i,"$stable",s),H(i,"$key",l),H(i,"$hasNormal",a),i}function mt(e,t,n,r){var i=function(){var t=fe;pe(e);var n=arguments.length?r.apply(null,arguments):r({}),i=(n=n&&"object"==typeof n&&!o(n)?[n]:Ge(n))&&n[0];return pe(t),n&&(!i||1===n.length&&i.isComment&&!vt(i))?void 0:n};return r.proxy&&Object.defineProperty(t,n,{get:i,enumerable:!0,configurable:!0}),i}function gt(e,t){return function(){return e[t]}}function yt(e){return{get attrs(){if(!e._attrsProxy){var t=e._attrsProxy={};H(t,"_v_attr_proxy",!0),bt(t,e.$attrs,r,e,"$attrs")}return e._attrsProxy},get listeners(){e._listenersProxy||bt(e._listenersProxy={},e.$listeners,r,e,"$listeners");return e._listenersProxy},get slots(){return function(e){e._slotsProxy||wt(e._slotsProxy={},e.$scopedSlots);return e._slotsProxy}(e)},emit:E(e.$emit,e),expose:function(t){t&&Object.keys(t).forEach((function(n){return Ue(e,t,n)}))}}}function bt(e,t,n,r,o){var i=!1;for(var a in t)a in e?t[a]!==n[a]&&(i=!0):(i=!0,_t(e,a,r,o));for(var a in e)a in t||(i=!0,delete e[a]);return i}function _t(e,t,n,r){Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:function(){return n[r][t]}})}function wt(e,t){for(var n in t)e[n]=t[n];for(var n in e)n in t||delete e[n]}var xt=null;function jt(e,t){return(e.__esModule||ue&&"Module"===e[Symbol.toStringTag])&&(e=e.default),u(e)?t.extend(e):e}function kt(e){if(o(e))for(var t=0;tdocument.createEvent("Event").timeStamp&&(cn=function(){return un.now()})}var fn=function(e,t){if(e.post){if(!t.post)return 1}else if(t.post)return-1;return e.id-t.id};function pn(){var e,t;for(ln=cn(),an=!0,tn.sort(fn),sn=0;snsn&&tn[n].id>e.id;)n--;tn.splice(n+1,0,e)}else tn.push(e);on||(on=!0,Ft(pn))}}function vn(e,t){if(e){for(var n=Object.create(null),r=ue?Reflect.ownKeys(e):Object.keys(e),o=0;o-1)if(i&&!j(o,"default"))a=!1;else if(""===a||a===$(e)){var l=Nn(String,o.type);(l<0||s-1:"string"==typeof e?e.split(",").indexOf(t)>-1:!!d(e)&&e.test(t)}function Xn(e,t){var n=e.cache,r=e.keys,o=e._vnode,i=e.$vnode;for(var a in n){var s=n[a];if(s){var l=s.name;l&&!t(l)&&Qn(n,a,r,o)}}i.componentOptions.children=void 0}function Qn(e,t,n,r){var o=e[t];!o||r&&o.tag===r.tag||o.componentInstance.$destroy(),e[t]=null,w(n,t)}Kn.prototype._init=function(e){var t=this;t._uid=Vn++,t._isVue=!0,t.__v_skip=!0,t._scope=new Je(!0),t._scope.parent=void 0,t._scope._vm=!0,e&&e._isComponent?function(e,t){var n=e.$options=Object.create(e.constructor.options),r=t._parentVnode;n.parent=t.parent,n._parentVnode=r;var o=r.componentOptions;n.propsData=o.propsData,n._parentListeners=o.listeners,n._renderChildren=o.children,n._componentTag=o.tag,t.render&&(n.render=t.render,n.staticRenderFns=t.staticRenderFns)}(t,e):t.$options=En(Hn(t.constructor),e||{},t),t._renderProxy=t,t._self=t,function(e){var t=e.$options,n=t.parent;if(n&&!t.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(e)}e.$parent=n,e.$root=n?n.$root:e,e.$children=[],e.$refs={},e._provided=n?n._provided:Object.create(null),e._watcher=null,e._inactive=null,e._directInactive=!1,e._isMounted=!1,e._isDestroyed=!1,e._isBeingDestroyed=!1}(t),function(e){e._events=Object.create(null),e._hasHookEvent=!1;var t=e.$options._parentListeners;t&&Gt(e,t)}(t),function(e){e._vnode=null,e._staticTrees=null;var t=e.$options,n=e.$vnode=t._parentVnode,o=n&&n.context;e.$slots=pt(t._renderChildren,o),e.$scopedSlots=n?ht(e.$parent,n.data.scopedSlots,e.$slots):r,e._c=function(t,n,r,o){return St(e,t,n,r,o,!1)},e.$createElement=function(t,n,r,o){return St(e,t,n,r,o,!0)};var i=n&&n.data;Te(e,"$attrs",i&&i.attrs||r,null,!0),Te(e,"$listeners",t._parentListeners||r,null,!0)}(t),en(t,"beforeCreate",void 0,!1),function(e){var t=vn(e.$options.inject,e);t&&(Pe(!1),Object.keys(t).forEach((function(n){Te(e,n,t[n])})),Pe(!0))}(t),Fn(t),function(e){var t=e.$options.provide;if(t){var n=c(t)?t.call(e):t;if(!u(n))return;for(var r=Be(e),o=ue?Reflect.ownKeys(n):Object.keys(n),i=0;i1?A(n):n;for(var r=A(arguments,1),o='event handler for "'.concat(e,'"'),i=0,a=n.length;iparseInt(this.max)&&Qn(e,t[0],t,this._vnode),this.vnodeToCache=null}}},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var e in this.cache)Qn(this.cache,e,this.keys)},mounted:function(){var e=this;this.cacheVNode(),this.$watch("include",(function(t){Xn(e,(function(e){return Zn(t,e)}))})),this.$watch("exclude",(function(t){Xn(e,(function(e){return!Zn(t,e)}))}))},updated:function(){this.cacheVNode()},render:function(){var e=this.$slots.default,t=kt(e),n=t&&t.componentOptions;if(n){var r=Gn(n),o=this.include,i=this.exclude;if(o&&(!r||!Zn(o,r))||i&&r&&Zn(i,r))return t;var a=this.cache,s=this.keys,l=null==t.key?n.Ctor.cid+(n.tag?"::".concat(n.tag):""):t.key;a[l]?(t.componentInstance=a[l].componentInstance,w(s,l),s.push(l)):(this.vnodeToCache=t,this.keyToCache=l),t.data.keepAlive=!0}return t||e&&e[0]}}};!function(e){var t={get:function(){return B}};Object.defineProperty(e,"config",t),e.util={warn:jn,extend:T,mergeOptions:En,defineReactive:Te},e.set=Le,e.delete=Re,e.nextTick=Ft,e.observable=function(e){return Ae(e),e},e.options=Object.create(null),z.forEach((function(t){e.options[t+"s"]=Object.create(null)})),e.options._base=e,T(e.options.components,er),function(e){e.use=function(e){var t=this._installedPlugins||(this._installedPlugins=[]);if(t.indexOf(e)>-1)return this;var n=A(arguments,1);return n.unshift(this),c(e.install)?e.install.apply(e,n):c(e)&&e.apply(null,n),t.push(e),this}}(e),function(e){e.mixin=function(e){return this.options=En(this.options,e),this}}(e),Wn(e),function(e){z.forEach((function(t){e[t]=function(e,n){return n?("component"===t&&p(n)&&(n.name=n.name||e,n=this.options._base.extend(n)),"directive"===t&&c(n)&&(n={bind:n,update:n}),this.options[t+"s"][e]=n,n):this.options[t+"s"][e]}}))}(e)}(Kn),Object.defineProperty(Kn.prototype,"$isServer",{get:ae}),Object.defineProperty(Kn.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(Kn,"FunctionalRenderContext",{value:hn}),Kn.version="2.7.16";var tr=b("style,class"),nr=b("input,textarea,option,select,progress"),rr=b("contenteditable,draggable,spellcheck"),or=b("events,caret,typing,plaintext-only"),ir=b("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible"),ar="http://www.w3.org/1999/xlink",sr=function(e){return":"===e.charAt(5)&&"xlink"===e.slice(0,5)},lr=function(e){return sr(e)?e.slice(6,e.length):""},cr=function(e){return null==e||!1===e};function ur(e){for(var t=e.data,n=e,r=e;a(r.componentInstance);)(r=r.componentInstance._vnode)&&r.data&&(t=fr(r.data,t));for(;a(n=n.parent);)n&&n.data&&(t=fr(t,n.data));return function(e,t){if(a(e)||a(t))return pr(e,dr(t));return""}(t.staticClass,t.class)}function fr(e,t){return{staticClass:pr(e.staticClass,t.staticClass),class:a(e.class)?[e.class,t.class]:t.class}}function pr(e,t){return e?t?e+" "+t:e:t||""}function dr(e){return Array.isArray(e)?function(e){for(var t,n="",r=0,o=e.length;r-1?Ir(e,t,n):ir(t)?cr(n)?e.removeAttribute(t):(n="allowfullscreen"===t&&"EMBED"===e.tagName?"true":t,e.setAttribute(t,n)):rr(t)?e.setAttribute(t,function(e,t){return cr(t)||"false"===t?"false":"contenteditable"===e&&or(t)?t:"true"}(t,n)):sr(t)?cr(n)?e.removeAttributeNS(ar,lr(t)):e.setAttributeNS(ar,t,n):Ir(e,t,n)}function Ir(e,t,n){if(cr(n))e.removeAttribute(t);else{if(X&&!Q&&"TEXTAREA"===e.tagName&&"placeholder"===t&&""!==n&&!e.__ieph){var r=function(t){t.stopImmediatePropagation(),e.removeEventListener("input",r)};e.addEventListener("input",r),e.__ieph=!0}e.setAttribute(t,n)}}var Dr={create:Mr,update:Mr};function Fr(e,t){var n=t.elm,r=t.data,o=e.data;if(!(i(r.staticClass)&&i(r.class)&&(i(o)||i(o.staticClass)&&i(o.class)))){var s=ur(t),l=n._transitionClasses;a(l)&&(s=pr(s,dr(l))),s!==n._prevClass&&(n.setAttribute("class",s),n._prevClass=s)}}var Ur,zr={create:Fr,update:Fr};function Jr(e,t,n){var r=Ur;return function o(){var i=t.apply(null,arguments);null!==i&&Vr(e,o,n,r)}}var Br=At&&!(ne&&Number(ne[1])<=53);function qr(e,t,n,r){if(Br){var o=ln,i=t;t=i._wrapper=function(e){if(e.target===e.currentTarget||e.timeStamp>=o||e.timeStamp<=0||e.target.ownerDocument!==document)return i.apply(this,arguments)}}Ur.addEventListener(e,t,oe?{capture:n,passive:r}:n)}function Vr(e,t,n,r){(r||Ur).removeEventListener(e,t._wrapper||t,n)}function Hr(e,t){if(!i(e.data.on)||!i(t.data.on)){var n=t.data.on||{},r=e.data.on||{};Ur=t.elm||e.elm,function(e){if(a(e.__r)){var t=X?"change":"input";e[t]=[].concat(e.__r,e[t]||[]),delete e.__r}a(e.__c)&&(e.change=[].concat(e.__c,e.change||[]),delete e.__c)}(n),He(n,r,qr,Vr,Jr,t.context),Ur=void 0}}var Kr,Wr={create:Hr,update:Hr,destroy:function(e){return Hr(e,kr)}};function Gr(e,t){if(!i(e.data.domProps)||!i(t.data.domProps)){var n,r,o=t.elm,l=e.data.domProps||{},c=t.data.domProps||{};for(n in(a(c.__ob__)||s(c._v_attr_proxy))&&(c=t.data.domProps=T({},c)),l)n in c||(o[n]="");for(n in c){if(r=c[n],"textContent"===n||"innerHTML"===n){if(t.children&&(t.children.length=0),r===l[n])continue;1===o.childNodes.length&&o.removeChild(o.childNodes[0])}if("value"===n&&"PROGRESS"!==o.tagName){o._value=r;var u=i(r)?"":String(r);Zr(o,u)&&(o.value=u)}else if("innerHTML"===n&&mr(o.tagName)&&i(o.innerHTML)){(Kr=Kr||document.createElement("div")).innerHTML="".concat(r,"");for(var f=Kr.firstChild;o.firstChild;)o.removeChild(o.firstChild);for(;f.firstChild;)o.appendChild(f.firstChild)}else if(r!==l[n])try{o[n]=r}catch(e){}}}}function Zr(e,t){return!e.composing&&("OPTION"===e.tagName||function(e,t){var n=!0;try{n=document.activeElement!==e}catch(e){}return n&&e.value!==t}(e,t)||function(e,t){var n=e.value,r=e._vModifiers;if(a(r)){if(r.number)return y(n)!==y(t);if(r.trim)return n.trim()!==t.trim()}return n!==t}(e,t))}var Xr={create:Gr,update:Gr},Qr=k((function(e){var t={},n=/:(.+)/;return e.split(/;(?![^(]*\))/g).forEach((function(e){if(e){var r=e.split(n);r.length>1&&(t[r[0].trim()]=r[1].trim())}})),t}));function Yr(e){var t=eo(e.style);return e.staticStyle?T(e.staticStyle,t):t}function eo(e){return Array.isArray(e)?L(e):"string"==typeof e?Qr(e):e}var to,no=/^--/,ro=/\s*!important$/,oo=function(e,t,n){if(no.test(t))e.style.setProperty(t,n);else if(ro.test(n))e.style.setProperty($(t),n.replace(ro,""),"important");else{var r=ao(t);if(Array.isArray(n))for(var o=0,i=n.length;o-1?t.split(co).forEach((function(t){return e.classList.add(t)})):e.classList.add(t);else{var n=" ".concat(e.getAttribute("class")||""," ");n.indexOf(" "+t+" ")<0&&e.setAttribute("class",(n+t).trim())}}function fo(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(" ")>-1?t.split(co).forEach((function(t){return e.classList.remove(t)})):e.classList.remove(t),e.classList.length||e.removeAttribute("class");else{for(var n=" ".concat(e.getAttribute("class")||""," "),r=" "+t+" ";n.indexOf(r)>=0;)n=n.replace(r," ");(n=n.trim())?e.setAttribute("class",n):e.removeAttribute("class")}}function po(e){if(e){if("object"==typeof e){var t={};return!1!==e.css&&T(t,vo(e.name||"v")),T(t,e),t}return"string"==typeof e?vo(e):void 0}}var vo=k((function(e){return{enterClass:"".concat(e,"-enter"),enterToClass:"".concat(e,"-enter-to"),enterActiveClass:"".concat(e,"-enter-active"),leaveClass:"".concat(e,"-leave"),leaveToClass:"".concat(e,"-leave-to"),leaveActiveClass:"".concat(e,"-leave-active")}})),ho=G&&!Q,mo="transition",go="transitionend",yo="animation",bo="animationend";ho&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(mo="WebkitTransition",go="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(yo="WebkitAnimation",bo="webkitAnimationEnd"));var _o=G?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(e){return e()};function wo(e){_o((function(){_o(e)}))}function xo(e,t){var n=e._transitionClasses||(e._transitionClasses=[]);n.indexOf(t)<0&&(n.push(t),uo(e,t))}function jo(e,t){e._transitionClasses&&w(e._transitionClasses,t),fo(e,t)}function ko(e,t,n){var r=Oo(e,t),o=r.type,i=r.timeout,a=r.propCount;if(!o)return n();var s="transition"===o?go:bo,l=0,c=function(){e.removeEventListener(s,u),n()},u=function(t){t.target===e&&++l>=a&&c()};setTimeout((function(){l0&&(n="transition",u=a,f=i.length):"animation"===t?c>0&&(n="animation",u=c,f=l.length):f=(n=(u=Math.max(a,c))>0?a>c?"transition":"animation":null)?"transition"===n?i.length:l.length:0,{type:n,timeout:u,propCount:f,hasTransform:"transition"===n&&So.test(r[mo+"Property"])}}function Co(e,t){for(;e.length1}function Lo(e,t){!0!==t.data.show&&$o(t)}var Ro=function(e){var t,n,r={},c=e.modules,u=e.nodeOps;for(t=0;tv?_(e,i(n[g+1])?null:n[g+1].elm,n,d,g,r):d>g&&x(t,f,v)}(f,h,g,n,c):a(g)?(a(e.text)&&u.setTextContent(f,""),_(f,null,g,0,g.length-1,n)):a(h)?x(h,0,h.length-1):a(e.text)&&u.setTextContent(f,""):e.text!==t.text&&u.setTextContent(f,t.text),a(v)&&a(d=v.hook)&&a(d=d.postpatch)&&d(e,t)}}}function O(e,t,n){if(s(n)&&a(e.parent))e.parent.data.pendingInsert=t;else for(var r=0;r-1,a.selected!==i&&(a.selected=i);else if(I(Fo(a),r))return void(e.selectedIndex!==s&&(e.selectedIndex=s));o||(e.selectedIndex=-1)}}function Do(e,t){return t.every((function(t){return!I(t,e)}))}function Fo(e){return"_value"in e?e._value:e.value}function Uo(e){e.target.composing=!0}function zo(e){e.target.composing&&(e.target.composing=!1,Jo(e.target,"input"))}function Jo(e,t){var n=document.createEvent("HTMLEvents");n.initEvent(t,!0,!0),e.dispatchEvent(n)}function Bo(e){return!e.componentInstance||e.data&&e.data.transition?e:Bo(e.componentInstance._vnode)}var qo={model:Mo,show:{bind:function(e,t,n){var r=t.value,o=(n=Bo(n)).data&&n.data.transition,i=e.__vOriginalDisplay="none"===e.style.display?"":e.style.display;r&&o?(n.data.show=!0,$o(n,(function(){e.style.display=i}))):e.style.display=r?i:"none"},update:function(e,t,n){var r=t.value;!r!=!t.oldValue&&((n=Bo(n)).data&&n.data.transition?(n.data.show=!0,r?$o(n,(function(){e.style.display=e.__vOriginalDisplay})):Eo(n,(function(){e.style.display="none"}))):e.style.display=r?e.__vOriginalDisplay:"none")},unbind:function(e,t,n,r,o){o||(e.style.display=e.__vOriginalDisplay)}}},Vo={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function Ho(e){var t=e&&e.componentOptions;return t&&t.Ctor.options.abstract?Ho(kt(t.children)):e}function Ko(e){var t={},n=e.$options;for(var r in n.propsData)t[r]=e[r];var o=n._parentListeners;for(var r in o)t[O(r)]=o[r];return t}function Wo(e,t){if(/\d-keep-alive$/.test(t.tag))return e("keep-alive",{props:t.componentOptions.propsData})}var Go=function(e){return e.tag||vt(e)},Zo=function(e){return"show"===e.name},Xo={name:"transition",props:Vo,abstract:!0,render:function(e){var t=this,n=this.$slots.default;if(n&&(n=n.filter(Go)).length){0;var r=this.mode;0;var o=n[0];if(function(e){for(;e=e.parent;)if(e.data.transition)return!0}(this.$vnode))return o;var i=Ho(o);if(!i)return o;if(this._leaving)return Wo(e,o);var a="__transition-".concat(this._uid,"-");i.key=null==i.key?i.isComment?a+"comment":a+i.tag:l(i.key)?0===String(i.key).indexOf(a)?i.key:a+i.key:i.key;var s=(i.data||(i.data={})).transition=Ko(this),c=this._vnode,u=Ho(c);if(i.data.directives&&i.data.directives.some(Zo)&&(i.data.show=!0),u&&u.data&&!function(e,t){return t.key===e.key&&t.tag===e.tag}(i,u)&&!vt(u)&&(!u.componentInstance||!u.componentInstance._vnode.isComment)){var f=u.data.transition=T({},s);if("out-in"===r)return this._leaving=!0,Ke(f,"afterLeave",(function(){t._leaving=!1,t.$forceUpdate()})),Wo(e,o);if("in-out"===r){if(vt(i))return c;var p,d=function(){p()};Ke(s,"afterEnter",d),Ke(s,"enterCancelled",d),Ke(f,"delayLeave",(function(e){p=e}))}}return o}}},Qo=T({tag:String,moveClass:String},Vo);function Yo(e){e.elm._moveCb&&e.elm._moveCb(),e.elm._enterCb&&e.elm._enterCb()}function ei(e){e.data.newPos=e.elm.getBoundingClientRect()}function ti(e){var t=e.data.pos,n=e.data.newPos,r=t.left-n.left,o=t.top-n.top;if(r||o){e.data.moved=!0;var i=e.elm.style;i.transform=i.WebkitTransform="translate(".concat(r,"px,").concat(o,"px)"),i.transitionDuration="0s"}}delete Qo.mode;var ni={Transition:Xo,TransitionGroup:{props:Qo,beforeMount:function(){var e=this,t=this._update;this._update=function(n,r){var o=Xt(e);e.__patch__(e._vnode,e.kept,!1,!0),e._vnode=e.kept,o(),t.call(e,n,r)}},render:function(e){for(var t=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,o=this.$slots.default||[],i=this.children=[],a=Ko(this),s=0;s-1?yr[e]=t.constructor===window.HTMLUnknownElement||t.constructor===window.HTMLElement:yr[e]=/HTMLUnknownElement/.test(t.toString())},T(Kn.options.directives,qo),T(Kn.options.components,ni),Kn.prototype.__patch__=G?Ro:R,Kn.prototype.$mount=function(e,t){return function(e,t,n){var r;e.$el=t,e.$options.render||(e.$options.render=ve),en(e,"beforeMount"),r=function(){e._update(e._render(),n)},new Vt(e,r,R,{before:function(){e._isMounted&&!e._isDestroyed&&en(e,"beforeUpdate")}},!0),n=!1;var o=e._preWatchers;if(o)for(var i=0;i=0&&(t=e.slice(r),e=e.slice(0,r));var o=e.indexOf("?");return o>=0&&(n=e.slice(o+1),e=e.slice(0,o)),{path:e,query:n,hash:t}}(o.path||""),c=t&&t.path||"/",u=l.path?ji(l.path,c,n||o.append):c,f=function(e,t,n){void 0===t&&(t={});var r,o=n||ui;try{r=o(e||"")}catch(e){r={}}for(var i in t){var a=t[i];r[i]=Array.isArray(a)?a.map(ci):ci(a)}return r}(l.query,o.query,r&&r.options.parseQuery),p=o.hash||l.hash;return p&&"#"!==p.charAt(0)&&(p="#"+p),{_normalized:!0,path:u,query:f,hash:p}}var qi,Vi=function(){},Hi={name:"RouterLink",props:{to:{type:[String,Object],required:!0},tag:{type:String,default:"a"},custom:Boolean,exact:Boolean,exactPath:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,ariaCurrentValue:{type:String,default:"page"},event:{type:[String,Array],default:"click"}},render:function(e){var t=this,n=this.$router,r=this.$route,o=n.resolve(this.to,r,this.append),i=o.location,a=o.route,s=o.href,l={},c=n.options.linkActiveClass,u=n.options.linkExactActiveClass,f=null==c?"router-link-active":c,p=null==u?"router-link-exact-active":u,d=null==this.activeClass?f:this.activeClass,v=null==this.exactActiveClass?p:this.exactActiveClass,h=a.redirectedFrom?di(null,Bi(a.redirectedFrom),null,n):a;l[v]=yi(r,h,this.exactPath),l[d]=this.exact||this.exactPath?l[v]:function(e,t){return 0===e.path.replace(pi,"/").indexOf(t.path.replace(pi,"/"))&&(!t.hash||e.hash===t.hash)&&function(e,t){for(var n in t)if(!(n in e))return!1;return!0}(e.query,t.query)}(r,h);var m=l[v]?this.ariaCurrentValue:null,g=function(e){Ki(e)&&(t.replace?n.replace(i,Vi):n.push(i,Vi))},y={click:Ki};Array.isArray(this.event)?this.event.forEach((function(e){y[e]=g})):y[this.event]=g;var b={class:l},_=!this.$scopedSlots.$hasNormal&&this.$scopedSlots.default&&this.$scopedSlots.default({href:s,route:a,navigate:g,isActive:l[d],isExactActive:l[v]});if(_){if(1===_.length)return _[0];if(_.length>1||!_.length)return 0===_.length?e():e("span",{},_)}if("a"===this.tag)b.on=y,b.attrs={href:s,"aria-current":m};else{var w=function e(t){var n;if(t)for(var r=0;r-1&&(s.params[p]=n.params[p]);return s.path=Ji(u.path,s.params),l(u,s,a)}if(s.path){s.params={};for(var d=0;d-1}function ka(e,t){return ja(e)&&e._isRouter&&(null==t||e.type===t)}function Sa(e,t,n){var r=function(o){o>=e.length?n():e[o]?t(e[o],(function(){r(o+1)})):r(o+1)};r(0)}function Oa(e){return function(t,n,r){var o=!1,i=0,a=null;Ca(e,(function(e,t,n,s){if("function"==typeof e&&void 0===e.cid){o=!0,i++;var l,c=Ea((function(t){var o;((o=t).__esModule||$a&&"Module"===o[Symbol.toStringTag])&&(t=t.default),e.resolved="function"==typeof t?t:qi.extend(t),n.components[s]=t,--i<=0&&r()})),u=Ea((function(e){var t="Failed to resolve async component "+s+": "+e;a||(a=ja(e)?e:new Error(t),r(a))}));try{l=e(c,u)}catch(e){u(e)}if(l)if("function"==typeof l.then)l.then(c,u);else{var f=l.component;f&&"function"==typeof f.then&&f.then(c,u)}}})),o||r()}}function Ca(e,t){return Pa(e.map((function(e){return Object.keys(e.components).map((function(n){return t(e.components[n],e.instances[n],e,n)}))})))}function Pa(e){return Array.prototype.concat.apply([],e)}var $a="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;function Ea(e){var t=!1;return function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];if(!t)return t=!0,e.apply(this,n)}}var Aa=function(e,t){this.router=e,this.base=function(e){if(!e)if(Wi){var t=document.querySelector("base");e=(e=t&&t.getAttribute("href")||"/").replace(/^https?:\/\/[^\/]+/,"")}else e="/";"/"!==e.charAt(0)&&(e="/"+e);return e.replace(/\/$/,"")}(t),this.current=hi,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[],this.listeners=[]};function Ta(e,t,n,r){var o=Ca(e,(function(e,r,o,i){var a=function(e,t){"function"!=typeof e&&(e=qi.extend(e));return e.options[t]}(e,t);if(a)return Array.isArray(a)?a.map((function(e){return n(e,r,o,i)})):n(a,r,o,i)}));return Pa(r?o.reverse():o)}function La(e,t){if(t)return function(){return e.apply(t,arguments)}}Aa.prototype.listen=function(e){this.cb=e},Aa.prototype.onReady=function(e,t){this.ready?e():(this.readyCbs.push(e),t&&this.readyErrorCbs.push(t))},Aa.prototype.onError=function(e){this.errorCbs.push(e)},Aa.prototype.transitionTo=function(e,t,n){var r,o=this;try{r=this.router.match(e,this.current)}catch(e){throw this.errorCbs.forEach((function(t){t(e)})),e}var i=this.current;this.confirmTransition(r,(function(){o.updateRoute(r),t&&t(r),o.ensureURL(),o.router.afterHooks.forEach((function(e){e&&e(r,i)})),o.ready||(o.ready=!0,o.readyCbs.forEach((function(e){e(r)})))}),(function(e){n&&n(e),e&&!o.ready&&(ka(e,ya.redirected)&&i===hi||(o.ready=!0,o.readyErrorCbs.forEach((function(t){t(e)}))))}))},Aa.prototype.confirmTransition=function(e,t,n){var r=this,o=this.current;this.pending=e;var i,a,s=function(e){!ka(e)&&ja(e)&&(r.errorCbs.length?r.errorCbs.forEach((function(t){t(e)})):console.error(e)),n&&n(e)},l=e.matched.length-1,c=o.matched.length-1;if(yi(e,o)&&l===c&&e.matched[l]===o.matched[c])return this.ensureURL(),e.hash&&aa(this.router,o,e,!1),s(((a=wa(i=o,e,ya.duplicated,'Avoided redundant navigation to current location: "'+i.fullPath+'".')).name="NavigationDuplicated",a));var u=function(e,t){var n,r=Math.max(e.length,t.length);for(n=0;n0)){var t=this.router,n=t.options.scrollBehavior,r=ha&&n;r&&this.listeners.push(ia());var o=function(){var n=e.current,o=Ma(e.base);e.current===hi&&o===e._startLocation||e.transitionTo(o,(function(e){r&&aa(t,e,n,!0)}))};window.addEventListener("popstate",o),this.listeners.push((function(){window.removeEventListener("popstate",o)}))}},t.prototype.go=function(e){window.history.go(e)},t.prototype.push=function(e,t,n){var r=this,o=this.current;this.transitionTo(e,(function(e){ma(ki(r.base+e.fullPath)),aa(r.router,e,o,!1),t&&t(e)}),n)},t.prototype.replace=function(e,t,n){var r=this,o=this.current;this.transitionTo(e,(function(e){ga(ki(r.base+e.fullPath)),aa(r.router,e,o,!1),t&&t(e)}),n)},t.prototype.ensureURL=function(e){if(Ma(this.base)!==this.current.fullPath){var t=ki(this.base+this.current.fullPath);e?ma(t):ga(t)}},t.prototype.getCurrentLocation=function(){return Ma(this.base)},t}(Aa);function Ma(e){var t=window.location.pathname,n=t.toLowerCase(),r=e.toLowerCase();return!e||n!==r&&0!==n.indexOf(ki(r+"/"))||(t=t.slice(e.length)),(t||"/")+window.location.search+window.location.hash}var Na=function(e){function t(t,n,r){e.call(this,t,n),r&&function(e){var t=Ma(e);if(!/^\/#/.test(t))return window.location.replace(ki(e+"/#"+t)),!0}(this.base)||Ia()}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.setupListeners=function(){var e=this;if(!(this.listeners.length>0)){var t=this.router.options.scrollBehavior,n=ha&&t;n&&this.listeners.push(ia());var r=function(){var t=e.current;Ia()&&e.transitionTo(Da(),(function(r){n&&aa(e.router,r,t,!0),ha||za(r.fullPath)}))},o=ha?"popstate":"hashchange";window.addEventListener(o,r),this.listeners.push((function(){window.removeEventListener(o,r)}))}},t.prototype.push=function(e,t,n){var r=this,o=this.current;this.transitionTo(e,(function(e){Ua(e.fullPath),aa(r.router,e,o,!1),t&&t(e)}),n)},t.prototype.replace=function(e,t,n){var r=this,o=this.current;this.transitionTo(e,(function(e){za(e.fullPath),aa(r.router,e,o,!1),t&&t(e)}),n)},t.prototype.go=function(e){window.history.go(e)},t.prototype.ensureURL=function(e){var t=this.current.fullPath;Da()!==t&&(e?Ua(t):za(t))},t.prototype.getCurrentLocation=function(){return Da()},t}(Aa);function Ia(){var e=Da();return"/"===e.charAt(0)||(za("/"+e),!1)}function Da(){var e=window.location.href,t=e.indexOf("#");return t<0?"":e=e.slice(t+1)}function Fa(e){var t=window.location.href,n=t.indexOf("#");return(n>=0?t.slice(0,n):t)+"#"+e}function Ua(e){ha?ma(Fa(e)):window.location.hash=e}function za(e){ha?ga(Fa(e)):window.location.replace(Fa(e))}var Ja=function(e){function t(t,n){e.call(this,t,n),this.stack=[],this.index=-1}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.push=function(e,t,n){var r=this;this.transitionTo(e,(function(e){r.stack=r.stack.slice(0,r.index+1).concat(e),r.index++,t&&t(e)}),n)},t.prototype.replace=function(e,t,n){var r=this;this.transitionTo(e,(function(e){r.stack=r.stack.slice(0,r.index).concat(e),t&&t(e)}),n)},t.prototype.go=function(e){var t=this,n=this.index+e;if(!(n<0||n>=this.stack.length)){var r=this.stack[n];this.confirmTransition(r,(function(){var e=t.current;t.index=n,t.updateRoute(r),t.router.afterHooks.forEach((function(t){t&&t(r,e)}))}),(function(e){ka(e,ya.duplicated)&&(t.index=n)}))}},t.prototype.getCurrentLocation=function(){var e=this.stack[this.stack.length-1];return e?e.fullPath:"/"},t.prototype.ensureURL=function(){},t}(Aa),Ba=function(e){void 0===e&&(e={}),this.app=null,this.apps=[],this.options=e,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=Xi(e.routes||[],this);var t=e.mode||"hash";switch(this.fallback="history"===t&&!ha&&!1!==e.fallback,this.fallback&&(t="hash"),Wi||(t="abstract"),this.mode=t,t){case"history":this.history=new Ra(this,e.base);break;case"hash":this.history=new Na(this,e.base,this.fallback);break;case"abstract":this.history=new Ja(this,e.base);break;default:0}},qa={currentRoute:{configurable:!0}};Ba.prototype.match=function(e,t,n){return this.matcher.match(e,t,n)},qa.currentRoute.get=function(){return this.history&&this.history.current},Ba.prototype.init=function(e){var t=this;if(this.apps.push(e),e.$once("hook:destroyed",(function(){var n=t.apps.indexOf(e);n>-1&&t.apps.splice(n,1),t.app===e&&(t.app=t.apps[0]||null),t.app||t.history.teardown()})),!this.app){this.app=e;var n=this.history;if(n instanceof Ra||n instanceof Na){var r=function(e){n.setupListeners(),function(e){var r=n.current,o=t.options.scrollBehavior;ha&&o&&"fullPath"in e&&aa(t,e,r,!1)}(e)};n.transitionTo(n.getCurrentLocation(),r,r)}n.listen((function(e){t.apps.forEach((function(t){t._route=e}))}))}},Ba.prototype.beforeEach=function(e){return Ha(this.beforeHooks,e)},Ba.prototype.beforeResolve=function(e){return Ha(this.resolveHooks,e)},Ba.prototype.afterEach=function(e){return Ha(this.afterHooks,e)},Ba.prototype.onReady=function(e,t){this.history.onReady(e,t)},Ba.prototype.onError=function(e){this.history.onError(e)},Ba.prototype.push=function(e,t,n){var r=this;if(!t&&!n&&"undefined"!=typeof Promise)return new Promise((function(t,n){r.history.push(e,t,n)}));this.history.push(e,t,n)},Ba.prototype.replace=function(e,t,n){var r=this;if(!t&&!n&&"undefined"!=typeof Promise)return new Promise((function(t,n){r.history.replace(e,t,n)}));this.history.replace(e,t,n)},Ba.prototype.go=function(e){this.history.go(e)},Ba.prototype.back=function(){this.go(-1)},Ba.prototype.forward=function(){this.go(1)},Ba.prototype.getMatchedComponents=function(e){var t=e?e.matched?e:this.resolve(e).route:this.currentRoute;return t?[].concat.apply([],t.matched.map((function(e){return Object.keys(e.components).map((function(t){return e.components[t]}))}))):[]},Ba.prototype.resolve=function(e,t,n){var r=Bi(e,t=t||this.history.current,n,this),o=this.match(r,t),i=o.redirectedFrom||o.fullPath;return{location:r,route:o,href:function(e,t,n){var r="hash"===n?"#"+t:t;return e?ki(e+"/"+r):r}(this.history.base,i,this.mode),normalizedTo:r,resolved:o}},Ba.prototype.getRoutes=function(){return this.matcher.getRoutes()},Ba.prototype.addRoute=function(e,t){this.matcher.addRoute(e,t),this.history.current!==hi&&this.history.transitionTo(this.history.getCurrentLocation())},Ba.prototype.addRoutes=function(e){this.matcher.addRoutes(e),this.history.current!==hi&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(Ba.prototype,qa);var Va=Ba;function Ha(e,t){return e.push(t),function(){var n=e.indexOf(t);n>-1&&e.splice(n,1)}}Ba.install=function e(t){if(!e.installed||qi!==t){e.installed=!0,qi=t;var n=function(e){return void 0!==e},r=function(e,t){var r=e.$options._parentVnode;n(r)&&n(r=r.data)&&n(r=r.registerRouteInstance)&&r(e,t)};t.mixin({beforeCreate:function(){n(this.$options.router)?(this._routerRoot=this,this._router=this.$options.router,this._router.init(this),t.util.defineReactive(this,"_route",this._router.history.current)):this._routerRoot=this.$parent&&this.$parent._routerRoot||this,r(this,this)},destroyed:function(){r(this)}}),Object.defineProperty(t.prototype,"$router",{get:function(){return this._routerRoot._router}}),Object.defineProperty(t.prototype,"$route",{get:function(){return this._routerRoot._route}}),t.component("RouterView",wi),t.component("RouterLink",Hi);var o=t.config.optionMergeStrategies;o.beforeRouteEnter=o.beforeRouteLeave=o.beforeRouteUpdate=o.created}},Ba.version="3.6.5",Ba.isNavigationFailure=ka,Ba.NavigationFailureType=ya,Ba.START_LOCATION=hi,Wi&&window.Vue&&window.Vue.use(Ba);n(95);n(122),n(88);var Ka={"components/AlgoliaSearchBox":()=>Promise.all([n.e(0),n.e(15)]).then(n.bind(null,372)),"components/DropdownLink":()=>Promise.all([n.e(0),n.e(16)]).then(n.bind(null,254)),"components/DropdownTransition":()=>Promise.all([n.e(0),n.e(40)]).then(n.bind(null,241)),"components/Home":()=>Promise.all([n.e(0),n.e(19)]).then(n.bind(null,299)),"components/NavLink":()=>n.e(42).then(n.bind(null,240)),"components/NavLinks":()=>Promise.all([n.e(0),n.e(13)]).then(n.bind(null,265)),"components/Navbar":()=>Promise.all([n.e(0),n.e(1)]).then(n.bind(null,369)),"components/Page":()=>Promise.all([n.e(0),n.e(12)]).then(n.bind(null,300)),"components/PageEdit":()=>Promise.all([n.e(0),n.e(20)]).then(n.bind(null,255)),"components/PageNav":()=>Promise.all([n.e(0),n.e(17)]).then(n.bind(null,267)),"components/Sidebar":()=>Promise.all([n.e(0),n.e(11)]).then(n.bind(null,301)),"components/SidebarButton":()=>Promise.all([n.e(0),n.e(41)]).then(n.bind(null,302)),"components/SidebarGroup":()=>Promise.all([n.e(0),n.e(3)]).then(n.bind(null,266)),"components/SidebarLink":()=>Promise.all([n.e(0),n.e(24)]).then(n.bind(null,256)),"components/SidebarLinks":()=>Promise.all([n.e(0),n.e(3)]).then(n.bind(null,253)),"global-components/Badge":()=>Promise.all([n.e(0),n.e(4)]).then(n.bind(null,390)),"global-components/CodeBlock":()=>Promise.all([n.e(0),n.e(5)]).then(n.bind(null,373)),"global-components/CodeGroup":()=>Promise.all([n.e(0),n.e(6)]).then(n.bind(null,374)),"layouts/404":()=>n.e(7).then(n.bind(null,375)),"layouts/Layout":()=>Promise.all([n.e(0),n.e(1),n.e(2)]).then(n.bind(null,376)),NotFound:()=>n.e(7).then(n.bind(null,375)),Layout:()=>Promise.all([n.e(0),n.e(1),n.e(2)]).then(n.bind(null,376))},Wa={"v-2216e8dc":()=>n.e(10).then(n.bind(null,391)),"v-0b4d4089":()=>n.e(44).then(n.bind(null,392)),"v-094b9dee":()=>n.e(45).then(n.bind(null,393)),"v-7eb94829":()=>n.e(46).then(n.bind(null,394)),"v-29ebca8e":()=>n.e(47).then(n.bind(null,395)),"v-51aaf849":()=>n.e(48).then(n.bind(null,396)),"v-126ea6be":()=>n.e(49).then(n.bind(null,397)),"v-003ee409":()=>n.e(50).then(n.bind(null,398)),"v-4d7f1c8a":()=>n.e(51).then(n.bind(null,399)),"v-83a41dee":()=>n.e(52).then(n.bind(null,400)),"v-49301ee2":()=>n.e(53).then(n.bind(null,401)),"v-d1f646ae":()=>n.e(54).then(n.bind(null,402)),"v-464fd629":()=>n.e(55).then(n.bind(null,403)),"v-b5351e9e":()=>n.e(57).then(n.bind(null,404)),"v-7cca31fe":()=>n.e(56).then(n.bind(null,405)),"v-76cafeae":()=>n.e(58).then(n.bind(null,406)),"v-f3391bf6":()=>n.e(59).then(n.bind(null,407)),"v-3ad539ae":()=>n.e(61).then(n.bind(null,408)),"v-62aa1369":()=>n.e(60).then(n.bind(null,409)),"v-5e92fa09":()=>n.e(62).then(n.bind(null,410)),"v-8de1af1a":()=>n.e(63).then(n.bind(null,411)),"v-1f38ca2e":()=>n.e(65).then(n.bind(null,412)),"v-1dfe032e":()=>n.e(66).then(n.bind(null,413)),"v-48953121":()=>n.e(64).then(n.bind(null,414)),"v-27531941":()=>n.e(67).then(n.bind(null,415)),"v-c918a5fa":()=>n.e(69).then(n.bind(null,416)),"v-67c77489":()=>n.e(68).then(n.bind(null,417)),"v-5a94ae89":()=>n.e(70).then(n.bind(null,418)),"v-2abeb1ab":()=>n.e(71).then(n.bind(null,419)),"v-506a67bc":()=>n.e(73).then(n.bind(null,420)),"v-7bf93309":()=>n.e(74).then(n.bind(null,421)),"v-959a2c2e":()=>n.e(72).then(n.bind(null,422)),"v-07fb5e62":()=>n.e(75).then(n.bind(null,423)),"v-b99d2c2e":()=>n.e(77).then(n.bind(null,424)),"v-19f2c039":()=>n.e(76).then(n.bind(null,425)),"v-7f55ccc9":()=>n.e(79).then(n.bind(null,426)),"v-bb53a316":()=>n.e(81).then(n.bind(null,427)),"v-6731dec1":()=>n.e(78).then(n.bind(null,428)),"v-bf7e876e":()=>n.e(80).then(n.bind(null,429)),"v-90fdf4e6":()=>n.e(84).then(n.bind(null,430)),"v-74774829":()=>n.e(83).then(n.bind(null,431)),"v-114a7465":()=>n.e(85).then(n.bind(null,432)),"v-20f55eeb":()=>n.e(82).then(n.bind(null,433))};function Ga(e){const t=Object.create(null);return function(n){return t[n]||(t[n]=e(n))}}const Za=/-(\w)/g,Xa=Ga(e=>e.replace(Za,(e,t)=>t?t.toUpperCase():"")),Qa=/\B([A-Z])/g,Ya=Ga(e=>e.replace(Qa,"-$1").toLowerCase()),es=Ga(e=>e.charAt(0).toUpperCase()+e.slice(1));function ts(e,t){if(!t)return;if(e(t))return e(t);return t.includes("-")?e(es(Xa(t))):e(es(t))||e(Ya(t))}const ns=Object.assign({},Ka,Wa),rs=e=>ns[e],os=e=>Wa[e],is=e=>Ka[e],as=e=>Kn.component(e);function ss(e){return ts(os,e)}function ls(e){return ts(is,e)}function cs(e){return ts(rs,e)}function us(e){return ts(as,e)}function fs(...e){return Promise.all(e.filter(e=>e).map(async e=>{if(!us(e)&&cs(e)){const t=await cs(e)();Kn.component(e,t.default)}}))}function ps(e,t){"undefined"!=typeof window&&window.__VUEPRESS__&&(window.__VUEPRESS__[e]=t)}var ds=n(86),vs=n.n(ds),hs=n(87),ms=n.n(hs),gs={created(){if(this.siteMeta=this.$site.headTags.filter(([e])=>"meta"===e).map(([e,t])=>t),this.$ssrContext){const t=this.getMergedMetaTags();this.$ssrContext.title=this.$title,this.$ssrContext.lang=this.$lang,this.$ssrContext.pageMeta=(e=t)?e.map(e=>{let t="{t+=` ${n}="${ms()(e[n])}"`}),t+">"}).join("\n "):"",this.$ssrContext.canonicalLink=bs(this.$canonicalUrl)}var e},mounted(){this.currentMetaTags=[...document.querySelectorAll("meta")],this.updateMeta(),this.updateCanonicalLink()},methods:{updateMeta(){document.title=this.$title,document.documentElement.lang=this.$lang;const e=this.getMergedMetaTags();this.currentMetaTags=_s(e,this.currentMetaTags)},getMergedMetaTags(){const e=this.$page.frontmatter.meta||[];return vs()([{name:"description",content:this.$description}],e,this.siteMeta,ws)},updateCanonicalLink(){ys(),this.$canonicalUrl&&document.head.insertAdjacentHTML("beforeend",bs(this.$canonicalUrl))}},watch:{$page(){this.updateMeta(),this.updateCanonicalLink()}},beforeDestroy(){_s(null,this.currentMetaTags),ys()}};function ys(){const e=document.querySelector("link[rel='canonical']");e&&e.remove()}function bs(e=""){return e?``:""}function _s(e,t){if(t&&[...t].filter(e=>e.parentNode===document.head).forEach(e=>document.head.removeChild(e)),e)return e.map(e=>{const t=document.createElement("meta");return Object.keys(e).forEach(n=>{t.setAttribute(n,e[n])}),document.head.appendChild(t),t})}function ws(e){for(const t of["name","property","itemprop"])if(e.hasOwnProperty(t))return e[t]+t;return JSON.stringify(e)}var xs=n(22),js=n.n(xs),ks=[gs,{mounted(){js.a.configure({showSpinner:!1}),this.$router.beforeEach((e,t,n)=>{e.path===t.path||Kn.component(e.name)||js.a.start(),n()}),this.$router.afterEach(()=>{js.a.done(),this.isSidebarOpen=!1})}}],Ss={name:"GlobalLayout",computed:{layout(){const e=this.getLayout();return ps("layout",e),Kn.component(e)}},methods:{getLayout(){if(this.$page.path){const e=this.$page.frontmatter.layout;return e&&(this.$vuepress.getLayoutAsyncComponent(e)||this.$vuepress.getVueComponent(e))?e:"Layout"}return"NotFound"}}},Os=n(14),Cs=Object(Os.a)(Ss,(function(){return(0,this._self._c)(this.layout,{tag:"component"})}),[],!1,null,null,null).exports;!function(e,t,n){switch(t){case"components":e[t]||(e[t]={}),Object.assign(e[t],n);break;case"mixins":e[t]||(e[t]=[]),e[t].push(...n);break;default:throw new Error("Unknown option name.")}}(Cs,"mixins",ks);const Ps=[{name:"v-2216e8dc",path:"/",component:Cs,beforeEnter:(e,t,n)=>{fs("Layout","v-2216e8dc").then(n)}},{path:"/index.html",redirect:"/"},{name:"v-0b4d4089",path:"/api.html",component:Cs,beforeEnter:(e,t,n)=>{fs("Layout","v-0b4d4089").then(n)}},{name:"v-094b9dee",path:"/code_of_conduct/",component:Cs,beforeEnter:(e,t,n)=>{fs("Layout","v-094b9dee").then(n)}},{path:"/code_of_conduct/index.html",redirect:"/code_of_conduct/"},{path:"/code_of_conduct.html",redirect:"/code_of_conduct/"},{name:"v-7eb94829",path:"/codegen.html",component:Cs,beforeEnter:(e,t,n)=>{fs("Layout","v-7eb94829").then(n)}},{name:"v-29ebca8e",path:"/coercion.html",component:Cs,beforeEnter:(e,t,n)=>{fs("Layout","v-29ebca8e").then(n)}},{name:"v-51aaf849",path:"/components.html",component:Cs,beforeEnter:(e,t,n)=>{fs("Layout","v-51aaf849").then(n)}},{name:"v-126ea6be",path:"/contributing/",component:Cs,beforeEnter:(e,t,n)=>{fs("Layout","v-126ea6be").then(n)}},{path:"/contributing/index.html",redirect:"/contributing/"},{path:"/contributing.html",redirect:"/contributing/"},{name:"v-003ee409",path:"/faq.html",component:Cs,beforeEnter:(e,t,n)=>{fs("Layout","v-003ee409").then(n)}},{name:"v-4d7f1c8a",path:"/guide/async-validation.html",component:Cs,beforeEnter:(e,t,n)=>{fs("Layout","v-4d7f1c8a").then(n)}},{name:"v-83a41dee",path:"/guide/combining-schemas.html",component:Cs,beforeEnter:(e,t,n)=>{fs("Layout","v-83a41dee").then(n)}},{name:"v-49301ee2",path:"/guide/environments.html",component:Cs,beforeEnter:(e,t,n)=>{fs("Layout","v-49301ee2").then(n)}},{name:"v-d1f646ae",path:"/guide/formats.html",component:Cs,beforeEnter:(e,t,n)=>{fs("Layout","v-d1f646ae").then(n)}},{name:"v-464fd629",path:"/guide/getting-started.html",component:Cs,beforeEnter:(e,t,n)=>{fs("Layout","v-464fd629").then(n)}},{name:"v-b5351e9e",path:"/guide/modifying-data.html",component:Cs,beforeEnter:(e,t,n)=>{fs("Layout","v-b5351e9e").then(n)}},{name:"v-7cca31fe",path:"/guide/managing-schemas.html",component:Cs,beforeEnter:(e,t,n)=>{fs("Layout","v-7cca31fe").then(n)}},{name:"v-76cafeae",path:"/guide/schema-language.html",component:Cs,beforeEnter:(e,t,n)=>{fs("Layout","v-76cafeae").then(n)}},{name:"v-f3391bf6",path:"/guide/typescript.html",component:Cs,beforeEnter:(e,t,n)=>{fs("Layout","v-f3391bf6").then(n)}},{name:"v-3ad539ae",path:"/guide/why-ajv.html",component:Cs,beforeEnter:(e,t,n)=>{fs("Layout","v-3ad539ae").then(n)}},{name:"v-62aa1369",path:"/guide/user-keywords.html",component:Cs,beforeEnter:(e,t,n)=>{fs("Layout","v-62aa1369").then(n)}},{name:"v-5e92fa09",path:"/json-schema.html",component:Cs,beforeEnter:(e,t,n)=>{fs("Layout","v-5e92fa09").then(n)}},{name:"v-8de1af1a",path:"/json-type-definition.html",component:Cs,beforeEnter:(e,t,n)=>{fs("Layout","v-8de1af1a").then(n)}},{name:"v-1f38ca2e",path:"/license.html",component:Cs,beforeEnter:(e,t,n)=>{fs("Layout","v-1f38ca2e").then(n)}},{name:"v-1dfe032e",path:"/news/2020-08-14-mozilla-grant-openjs-foundation.html",component:Cs,beforeEnter:(e,t,n)=>{fs("Layout","v-1dfe032e").then(n)}},{name:"v-48953121",path:"/keywords.html",component:Cs,beforeEnter:(e,t,n)=>{fs("Layout","v-48953121").then(n)}},{name:"v-27531941",path:"/news/2020-12-15-ajv-version-7-released.html",component:Cs,beforeEnter:(e,t,n)=>{fs("Layout","v-27531941").then(n)}},{name:"v-c918a5fa",path:"/news/2021-03-27-ajv-version-8-released.html",component:Cs,beforeEnter:(e,t,n)=>{fs("Layout","v-c918a5fa").then(n)}},{name:"v-67c77489",path:"/news/2021-03-07-ajv-supports-json-type-definition.html",component:Cs,beforeEnter:(e,t,n)=>{fs("Layout","v-67c77489").then(n)}},{name:"v-5a94ae89",path:"/news/2021-04-24-ajv-online-event.html",component:Cs,beforeEnter:(e,t,n)=>{fs("Layout","v-5a94ae89").then(n)}},{name:"v-2abeb1ab",path:"/news/2021-05-24-ajv-online-event-video.html",component:Cs,beforeEnter:(e,t,n)=>{fs("Layout","v-2abeb1ab").then(n)}},{name:"v-506a67bc",path:"/news/",component:Cs,beforeEnter:(e,t,n)=>{fs("Layout","v-506a67bc").then(n)}},{path:"/news/index.html",redirect:"/news/"},{name:"v-7bf93309",path:"/options.html",component:Cs,beforeEnter:(e,t,n)=>{fs("Layout","v-7bf93309").then(n)}},{name:"v-959a2c2e",path:"/news/2021-07-22-ajv-microsoft-foss-fund-award.html",component:Cs,beforeEnter:(e,t,n)=>{fs("Layout","v-959a2c2e").then(n)}},{name:"v-07fb5e62",path:"/packages/",component:Cs,beforeEnter:(e,t,n)=>{fs("Layout","v-07fb5e62").then(n)}},{path:"/packages/index.html",redirect:"/packages/"},{name:"v-b99d2c2e",path:"/packages/ajv-errors.html",component:Cs,beforeEnter:(e,t,n)=>{fs("Layout","v-b99d2c2e").then(n)}},{name:"v-19f2c039",path:"/packages/ajv-cli.html",component:Cs,beforeEnter:(e,t,n)=>{fs("Layout","v-19f2c039").then(n)}},{name:"v-7f55ccc9",path:"/packages/ajv-i18n.html",component:Cs,beforeEnter:(e,t,n)=>{fs("Layout","v-7f55ccc9").then(n)}},{name:"v-bb53a316",path:"/security.html",component:Cs,beforeEnter:(e,t,n)=>{fs("Layout","v-bb53a316").then(n)}},{name:"v-6731dec1",path:"/packages/ajv-formats.html",component:Cs,beforeEnter:(e,t,n)=>{fs("Layout","v-6731dec1").then(n)}},{name:"v-bf7e876e",path:"/packages/ajv-keywords.html",component:Cs,beforeEnter:(e,t,n)=>{fs("Layout","v-bf7e876e").then(n)}},{name:"v-90fdf4e6",path:"/testimonials.html",component:Cs,beforeEnter:(e,t,n)=>{fs("Layout","v-90fdf4e6").then(n)}},{name:"v-74774829",path:"/strict-mode.html",component:Cs,beforeEnter:(e,t,n)=>{fs("Layout","v-74774829").then(n)}},{name:"v-114a7465",path:"/v6-to-v8-migration.html",component:Cs,beforeEnter:(e,t,n)=>{fs("Layout","v-114a7465").then(n)}},{name:"v-20f55eeb",path:"/standalone.html",component:Cs,beforeEnter:(e,t,n)=>{fs("Layout","v-20f55eeb").then(n)}},{path:"*",component:Cs}],$s={title:"Ajv JSON schema validator",description:"The fastest JSON schema Validator. Supports JSON Schema draft-04/06/07/2019-09/2020-12 and JSON Type Definition (RFC8927)",base:"/",headTags:[["link",{rel:"icon",href:"/favicon.ico"}],["meta",{charset:"utf-8"}],["meta",{property:"og:title",content:"Ajv JSON schema validator"}],["meta",{property:"og:description",content:"The fastest JSON schema Validator. Supports JSON Schema draft-04/06/07/2019-09/2020-12 and JSON Type Definition (RFC8927)"}],["meta",{property:"og:image",content:"https://ajv.js.org/img/ajv.png"}],["meta",{itemprop:"image",content:"https://ajv.js.org/img/ajv.png"}],["meta",{name:"twitter:card",content:"summary"}],["meta",{name:"twitter:title",content:"Ajv JSON schema validator"}],["meta",{name:"twitter:image:src",content:"https://ajv.js.org/img/ajv.png"}],["meta",{name:"apple-mobile-web-app-capable",content:"yes"}],["link",{rel:"apple-touch-icon",href:"/img/apple-touch-icon.png"}]],pages:[{frontmatter:{homepage:!0,sidebar:!1},regularPath:"/",relativePath:"README.md",key:"v-2216e8dc",path:"/",headers:[{level:2,title:"Security and reliability for JavaScript applications",slug:"security-and-reliability-for-javascript-applications"},{level:3,title:"Write less code",slug:"write-less-code"},{level:3,title:"Super fast & secure",slug:"super-fast-secure"},{level:3,title:"Multi-standard",slug:"multi-standard"},{level:2,title:"Ajv sponsors",slug:"ajv-sponsors"},{level:2,title:"What users say",slug:"what-users-say"},{level:2,title:"News",slug:"news"},{level:2,title:"Who uses Ajv",slug:"who-uses-ajv"},{level:2,title:"Contributors",slug:"contributors"}]},{title:"API Reference",frontmatter:{},regularPath:"/api.html",relativePath:"api.md",key:"v-0b4d4089",path:"/api.html",headers:[{level:2,title:"Ajv constructor and methods",slug:"ajv-constructor-and-methods"},{level:3,title:"new Ajv(options: object)",slug:"new-ajv-options-object"},{level:3,title:"ajv.compile(schema: object): (data: any) => boolean | Promise",slug:"ajv-compile-schema-object-data-any-boolean-promise-any"},{level:3,title:"ajv.compileSerializer(schema: object): (data: any) => string",slug:"ajv-compileserializer-schema-object-data-any-string"},{level:3,title:"ajv.compileParser(schema: object): (json: string) => any",slug:"ajv-compileparser-schema-object-json-string-any"},{level:3,title:"ajv.compileAsync(schema: object, meta?: boolean): Promise",slug:"ajv-compileasync-schema-object-meta-boolean-promise-function"},{level:3,title:"ajv.validate(schemaOrRef: object | string, data: any): boolean",slug:"ajv-validate-schemaorref-object-string-data-any-boolean"},{level:3,title:"ajv.addSchema(schema: object | object[], key?: string): Ajv",slug:"ajv-addschema-schema-object-object-key-string-ajv"},{level:3,title:"ajv.addMetaSchema(schema: object | object[], key?: string): Ajv",slug:"ajv-addmetaschema-schema-object-object-key-string-ajv"},{level:3,title:"ajv.validateSchema(schema: object): boolean",slug:"ajv-validateschema-schema-object-boolean"},{level:3,title:"ajv.getSchema(key: string): undefined | ((data: any) => boolean | Promise )",slug:"ajv-getschema-key-string-undefined-data-any-boolean-promise-any"},{level:3,title:"ajv.removeSchema(schemaOrRef: object | string | RegExp): Ajv",slug:"ajv-removeschema-schemaorref-object-string-regexp-ajv"},{level:3,title:"ajv.addFormat(name: string, format: Format): Ajv",slug:"ajv-addformat-name-string-format-format-ajv"},{level:3,title:"ajv.addKeyword(definition: string | object): Ajv",slug:"ajv-addkeyword-definition-string-object-ajv"},{level:3,title:"ajv.getKeyword(keyword: string): object | boolean",slug:"ajv-getkeyword-keyword-string-object-boolean"},{level:3,title:"ajv.removeKeyword(keyword: string): Ajv",slug:"ajv-removekeyword-keyword-string-ajv"},{level:3,title:"ajv.errorsText(errors?: object[], options?: object): string",slug:"ajv-errorstext-errors-object-options-object-string"},{level:2,title:"Validation errors",slug:"validation-errors"},{level:3,title:"Error objects",slug:"error-objects"},{level:3,title:"Error parameters",slug:"error-parameters"},{level:3,title:"Errors i18n",slug:"errors-i18n"},{level:3,title:"Error logging",slug:"error-logging"}]},{title:"Contributor Covenant Code of Conduct",frontmatter:{permalink:"/code_of_conduct"},regularPath:"/code_of_conduct.html",relativePath:"code_of_conduct.md",key:"v-094b9dee",path:"/code_of_conduct/",headers:[{level:3,title:"Our Pledge",slug:"our-pledge"},{level:3,title:"Our Standards",slug:"our-standards"},{level:3,title:"Our Responsibilities",slug:"our-responsibilities"},{level:3,title:"Scope",slug:"scope"},{level:3,title:"Enforcement",slug:"enforcement"},{level:3,title:"Attribution",slug:"attribution"}]},{title:"Code generation design",frontmatter:{},regularPath:"/codegen.html",relativePath:"codegen.md",key:"v-7eb94829",path:"/codegen.html",headers:[{level:2,title:"Safe code generation",slug:"safe-code-generation"},{level:2,title:"Code optimization",slug:"code-optimization"},{level:2,title:"User-defined keywords",slug:"user-defined-keywords"}]},{title:"Type coercion rules",frontmatter:{},regularPath:"/coercion.html",relativePath:"coercion.md",key:"v-29ebca8e",path:"/coercion.html",headers:[{level:2,title:"Coercion from string values",slug:"coercion-from-string-values"},{level:2,title:"Coercion from number values",slug:"coercion-from-number-values"},{level:2,title:"Coercion from boolean values",slug:"coercion-from-boolean-values"},{level:2,title:"Coercion from null",slug:"coercion-from-null"},{level:2,title:"Coercion to and from array",slug:"coercion-to-and-from-array"}]},{title:"Code components",frontmatter:{},regularPath:"/components.html",relativePath:"components.md",key:"v-51aaf849",path:"/components.html",headers:[{level:2,title:"Ajv classes",slug:"ajv-classes"},{level:2,title:"Schema compilation",slug:"schema-compilation"},{level:2,title:"Other components",slug:"other-components"}]},{title:"Contributing guide",frontmatter:{permalink:"/contributing"},regularPath:"/contributing.html",relativePath:"contributing.md",key:"v-126ea6be",path:"/contributing/",headers:[{level:2,title:"Documentation",slug:"documentation"},{level:2,title:"Issues",slug:"issues"},{level:3,title:"Bug reports",slug:"bug-reports"},{level:3,title:"Security vulnerabilities",slug:"security-vulnerabilities"},{level:3,title:"Change proposals",slug:"change-proposals"},{level:3,title:"Browser and compatibility issues",slug:"browser-and-compatibility-issues"},{level:3,title:"Installation and dependency issues",slug:"installation-and-dependency-issues"},{level:3,title:"Using JSON Schema standard",slug:"using-json-schema-standard"},{level:3,title:"Ajv usage questions",slug:"ajv-usage-questions"},{level:2,title:"Code",slug:"code"},{level:3,title:"How we make decisions",slug:"how-we-make-decisions"},{level:3,title:"Development",slug:"development"},{level:3,title:"Pull requests",slug:"pull-requests"},{level:3,title:"Contributions license",slug:"contributions-license"}]},{title:"Frequently Asked Questions",frontmatter:{},regularPath:"/faq.html",relativePath:"faq.md",key:"v-003ee409",path:"/faq.html",headers:[{level:2,title:"Using JSON schema",slug:"using-json-schema"},{level:2,title:"Ajv API for returning validation errors",slug:"ajv-api-for-returning-validation-errors"},{level:2,title:"Additional properties inside compound keywords anyOf, oneOf, etc.",slug:"additional-properties-inside-compound-keywords-anyof-oneof-etc"},{level:2,title:"Generating schemas with resolved references ($ref)",slug:"generating-schemas-with-resolved-references-ref"}]},{title:"Asynchronous validation",frontmatter:{},regularPath:"/guide/async-validation.html",relativePath:"guide/async-validation.md",key:"v-4d7f1c8a",path:"/guide/async-validation.html",headers:[{level:3,title:"Using transpilers",slug:"using-transpilers"}]},{title:"Combining schemas",frontmatter:{},regularPath:"/guide/combining-schemas.html",relativePath:"guide/combining-schemas.md",key:"v-83a41dee",path:"/guide/combining-schemas.html",headers:[{level:2,title:"Combining schemas with $ref",slug:"combining-schemas-with-ref"},{level:2,title:"Extending recursive schemas",slug:"extending-recursive-schemas"},{level:2,title:"$data reference",slug:"data-reference"},{level:2,title:"$merge and $patch keywords",slug:"merge-and-patch-keywords"}]},{title:"Execution environments",frontmatter:{},regularPath:"/guide/environments.html",relativePath:"guide/environments.md",key:"v-49301ee2",path:"/guide/environments.html",headers:[{level:2,title:"Server-side Node.js",slug:"server-side-node-js"},{level:2,title:"Short-lived environments",slug:"short-lived-environments"},{level:2,title:"Browsers",slug:"browsers"},{level:2,title:"ES5 environments",slug:"es5-environments"},{level:2,title:"CJS vs ESM exports",slug:"cjs-vs-esm-exports"},{level:2,title:"Other JavaScript environments",slug:"other-javascript-environments"},{level:2,title:"Command line interface",slug:"command-line-interface"}]},{title:"Format validation",frontmatter:{},regularPath:"/guide/formats.html",relativePath:"guide/formats.md",key:"v-d1f646ae",path:"/guide/formats.html",headers:[{level:2,title:"String formats",slug:"string-formats"},{level:2,title:"User-defined formats",slug:"user-defined-formats"},{level:2,title:"Formats and standalone validation code",slug:"formats-and-standalone-validation-code"}]},{title:"Getting started",frontmatter:{},regularPath:"/guide/getting-started.html",relativePath:"guide/getting-started.md",key:"v-464fd629",path:"/guide/getting-started.html",headers:[{level:2,title:"Install",slug:"install"},{level:2,title:"Basic data validation",slug:"basic-data-validation"},{level:2,title:"Parsing and serializing JSON",slug:"parsing-and-serializing-json"}]},{title:"Modifying data during validation",frontmatter:{},regularPath:"/guide/modifying-data.html",relativePath:"guide/modifying-data.md",key:"v-b5351e9e",path:"/guide/modifying-data.html",headers:[{level:2,title:"General considerations",slug:"general-considerations"},{level:2,title:"Removing additional properties",slug:"removing-additional-properties"},{level:2,title:"Assigning defaults",slug:"assigning-defaults"},{level:2,title:"Coercing data types",slug:"coercing-data-types"}]},{title:"Managing schemas",frontmatter:{},regularPath:"/guide/managing-schemas.html",relativePath:"guide/managing-schemas.md",key:"v-7cca31fe",path:"/guide/managing-schemas.html",headers:[{level:2,title:"Re-using validation functions",slug:"re-using-validation-functions"},{level:2,title:"Standalone validation code",slug:"standalone-validation-code"},{level:2,title:"Compiling during initialization",slug:"compiling-during-initialization"},{level:2,title:"Using Ajv instance cache",slug:"using-ajv-instance-cache"},{level:3,title:"Cache key: schema vs key vs $id",slug:"cache-key-schema-vs-key-vs-id"},{level:3,title:"Pre-adding all schemas vs adding on demand",slug:"pre-adding-all-schemas-vs-adding-on-demand"},{level:3,title:"Asynchronous schema loading",slug:"asynchronous-schema-loading"},{level:2,title:"Caching schemas in your code",slug:"caching-schemas-in-your-code"}]},{title:"Choosing schema language",frontmatter:{tags:["JTD"]},regularPath:"/guide/schema-language.html",relativePath:"guide/schema-language.md",key:"v-76cafeae",path:"/guide/schema-language.html",headers:[{level:2,title:"JSON Type Definition",slug:"json-type-definition"},{level:2,title:"JSON Schema",slug:"json-schema"},{level:3,title:"draft-04",slug:"draft-04"},{level:3,title:"draft-07 (and draft-06)",slug:"draft-07-and-draft-06"},{level:3,title:"draft 2019-09 (and draft-2020-12)",slug:"draft-2019-09-and-draft-2020-12"},{level:2,title:"Comparison",slug:"comparison"},{level:3,title:"JSON Schema",slug:"json-schema-2"},{level:3,title:"JSON Type Definition",slug:"json-type-definition-2"}]},{title:"Using with TypeScript",frontmatter:{},regularPath:"/guide/typescript.html",relativePath:"guide/typescript.md",key:"v-f3391bf6",path:"/guide/typescript.html",headers:[{level:2,title:"Additional functionality",slug:"additional-functionality"},{level:2,title:"Utility types for schemas",slug:"utility-types-for-schemas"},{level:2,title:"Utility type for JTD data type",slug:"utility-type-for-jtd-data-type"},{level:2,title:"Type-safe error handling",slug:"type-safe-error-handling"},{level:2,title:"Type-safe parsers and serializers",slug:"type-safe-parsers-and-serializers"},{level:2,title:"Type-safe unions",slug:"type-safe-unions"}]},{title:"Why use AJV",frontmatter:{},regularPath:"/guide/why-ajv.html",relativePath:"guide/why-ajv.md",key:"v-3ad539ae",path:"/guide/why-ajv.html",headers:[{level:2,title:"Write less code",slug:"write-less-code"},{level:2,title:"Super fast & secure",slug:"super-fast-secure"},{level:2,title:"Multi-standard",slug:"multi-standard"}]},{title:"User-defined keywords",frontmatter:{},regularPath:"/guide/user-keywords.html",relativePath:"guide/user-keywords.md",key:"v-62aa1369",path:"/guide/user-keywords.html"},{title:"JSON Schema",frontmatter:{},regularPath:"/json-schema.html",relativePath:"json-schema.md",key:"v-5e92fa09",path:"/json-schema.html",headers:[{level:2,title:"JSON Schema versions",slug:"json-schema-versions"},{level:3,title:"draft-07",slug:"draft-07"},{level:3,title:"draft-2019-09",slug:"draft-2019-09"},{level:3,title:"draft-2020-12",slug:"draft-2020-12"},{level:3,title:"draft-06",slug:"draft-06"},{level:3,title:"draft-04",slug:"draft-04"},{level:2,title:"OpenAPI support",slug:"openapi-support"},{level:2,title:"JSON data type",slug:"json-data-type"},{level:3,title:"type",slug:"type"},{level:3,title:"nullable",slug:"nullable"},{level:2,title:"Keywords for numbers",slug:"keywords-for-numbers"},{level:3,title:"maximum / minimum and exclusiveMaximum / exclusiveMinimum",slug:"maximum-minimum-and-exclusivemaximum-exclusiveminimum"},{level:3,title:"multipleOf",slug:"multipleof"},{level:2,title:"Keywords for strings",slug:"keywords-for-strings"},{level:3,title:"maxLength / minLength",slug:"maxlength-minlength"},{level:3,title:"pattern",slug:"pattern"},{level:3,title:"format",slug:"format"},{level:2,title:"Keywords for arrays",slug:"keywords-for-arrays"},{level:3,title:"maxItems / minItems",slug:"maxitems-minitems"},{level:3,title:"uniqueItems",slug:"uniqueitems"},{level:3,title:"items",slug:"items"},{level:3,title:"prefixItems",slug:"prefixitems"},{level:3,title:"additionalItems",slug:"additionalitems"},{level:3,title:"contains",slug:"contains"},{level:3,title:"maxContains / minContains",slug:"maxcontains-mincontains"},{level:3,title:"unevaluatedItems",slug:"unevaluateditems"},{level:2,title:"Keywords for objects",slug:"keywords-for-objects"},{level:3,title:"maxProperties / minProperties",slug:"maxproperties-minproperties"},{level:3,title:"required",slug:"required"},{level:3,title:"properties",slug:"properties"},{level:3,title:"patternProperties",slug:"patternproperties"},{level:3,title:"additionalProperties",slug:"additionalproperties"},{level:3,title:"dependencies",slug:"dependencies"},{level:3,title:"dependentRequired",slug:"dependentrequired"},{level:3,title:"dependentSchemas",slug:"dependentschemas"},{level:3,title:"propertyNames",slug:"propertynames"},{level:3,title:"unevaluatedProperties",slug:"unevaluatedproperties"},{level:3,title:"discriminator",slug:"discriminator"},{level:2,title:"Keywords for all types",slug:"keywords-for-all-types"},{level:3,title:"enum",slug:"enum"},{level:3,title:"const",slug:"const"},{level:2,title:"Compound keywords",slug:"compound-keywords"},{level:3,title:"not",slug:"not"},{level:3,title:"oneOf",slug:"oneof"},{level:3,title:"anyOf",slug:"anyof"},{level:3,title:"allOf",slug:"allof"},{level:3,title:"if/then/else",slug:"if-then-else"},{level:2,title:"Metadata keywords",slug:"metadata-keywords"}]},{title:"JSON Type Definition",frontmatter:{},regularPath:"/json-type-definition.html",relativePath:"json-type-definition.md",key:"v-8de1af1a",path:"/json-type-definition.html",headers:[{level:2,title:"JTD schema forms",slug:"jtd-schema-forms"},{level:3,title:"Type form",slug:"type-form"},{level:3,title:"Enum form",slug:"enum-form"},{level:3,title:"Elements form",slug:"elements-form"},{level:3,title:"Properties form",slug:"properties-form"},{level:3,title:"Discriminator form",slug:"discriminator-form"},{level:3,title:"Values form",slug:"values-form"},{level:3,title:"Ref form",slug:"ref-form"},{level:3,title:"Empty form",slug:"empty-form"},{level:2,title:"JTDSchemaType",slug:"jtdschematype"},{level:3,title:"Most Schemas",slug:"most-schemas"},{level:3,title:"Ref Schemas",slug:"ref-schemas"},{level:3,title:"Notable Omissions",slug:"notable-omissions"},{level:2,title:"Extending JTD",slug:"extending-jtd"},{level:3,title:"Metadata schema member",slug:"metadata-schema-member"},{level:3,title:"Union keyword",slug:"union-keyword"},{level:3,title:"User-defined keywords",slug:"user-defined-keywords"},{level:2,title:"Validation errors",slug:"validation-errors"}]},{frontmatter:{},regularPath:"/license.html",relativePath:"license.md",key:"v-1f38ca2e",path:"/license.html"},{title:"Mozilla MOSS grant and OpenJS Foundation",frontmatter:{news:!0,title:"Mozilla MOSS grant and OpenJS Foundation",date:"2020-08-14T00:00:00.000Z"},regularPath:"/news/2020-08-14-mozilla-grant-openjs-foundation.html",relativePath:"news/2020-08-14-mozilla-grant-openjs-foundation.md",key:"v-1dfe032e",path:"/news/2020-08-14-mozilla-grant-openjs-foundation.html",excerpt:'\n

Ajv has been awarded a grant from Mozilla’s Open Source Support (MOSS) program in the “Foundational Technology” track! It will sponsor the development of Ajv support of JSON Schema version 2019-09 and of JSON Type Definition (RFC8927).

\n

Ajv also joined OpenJS Foundation – having this support will help ensure the longevity and stability of Ajv for all its users.

\n'},{title:"User defined keywords",frontmatter:{},regularPath:"/keywords.html",relativePath:"keywords.md",key:"v-48953121",path:"/keywords.html",headers:[{level:2,title:"Common attributes of keyword definitions",slug:"common-attributes-of-keyword-definitions"},{level:3,title:"Define keyword with code generation function",slug:"define-keyword-with-code-generation-function"},{level:3,title:'Define keyword with "validate" function',slug:"define-keyword-with-validate-function"},{level:3,title:'Define keyword with "compile" function',slug:"define-keyword-with-compile-function"},{level:3,title:'Define keyword with "macro" function',slug:"define-keyword-with-macro-function"},{level:2,title:"Schema compilation context",slug:"schema-compilation-context"},{level:2,title:"Validation time variables",slug:"validation-time-variables"},{level:2,title:"Reporting errors",slug:"reporting-errors"}]},{title:"Ajv version 7 is released!",frontmatter:{news:!0,title:"Ajv version 7 is released!",date:"2020-12-15T00:00:00.000Z"},regularPath:"/news/2020-12-15-ajv-version-7-released.html",relativePath:"news/2020-12-15-ajv-version-7-released.md",key:"v-27531941",path:"/news/2020-12-15-ajv-version-7-released.html",excerpt:'

Ajv version 7 has these new features:

\n\n'},{title:"Ajv version 8 is released!",frontmatter:{news:!0,title:"Ajv version 8 is released!",date:"2021-03-27T00:00:00.000Z"},regularPath:"/news/2021-03-27-ajv-version-8-released.html",relativePath:"news/2021-03-27-ajv-version-8-released.md",key:"v-c918a5fa",path:"/news/2021-03-27-ajv-version-8-released.html",excerpt:'

Ajv version 8 has these new features:

\n\n'},{title:"Ajv supports JSON Type Definition",frontmatter:{news:!0,title:"Ajv supports JSON Type Definition",date:"2021-03-07T00:00:00.000Z"},regularPath:"/news/2021-03-07-ajv-supports-json-type-definition.html",relativePath:"news/2021-03-07-ajv-supports-json-type-definition.md",key:"v-67c77489",path:"/news/2021-03-07-ajv-supports-json-type-definition.html",excerpt:'

JSON Type Definition (JTD) is a new specification for defining JSON structures that is very simple to use, comparing with JSON Schema, less error prone, and it is published as RFC8927.

\n

See Choosing schema language for a detailed comparison between JSON Schema and JSON Type definition and informal specification.

\n'},{title:"Ajv online event - May 20, 10am PT / 6pm UK",frontmatter:{news:!0,title:"Ajv online event - May 20, 10am PT / 6pm UK",date:"2021-04-24T00:00:00.000Z",more:!1},regularPath:"/news/2021-04-24-ajv-online-event.html",relativePath:"news/2021-04-24-ajv-online-event.md",key:"v-5a94ae89",path:"/news/2021-04-24-ajv-online-event.html",excerpt:'

We will talk about:

\n
    \n
  • new features of Ajv version 8.
  • \n
  • the improvements sponsored by Mozilla\'s MOSS grant.
  • \n
  • how Ajv is used in JavaScript applications.
  • \n
\n

Speakers:

\n
    \n
  • Evgeny Poberezkin, the creator of Ajv.
  • \n
  • Mehan Jayasuriya, Program Officer at Mozilla Foundation, leading the MOSS and other programs investing in the open source and community ecosystems.
  • \n
  • Matteo Collina, Technical Director at NearForm and Node.js Technical Steering Committee member, creator of Fastify web framework.
  • \n
  • Kin Lane, Chief Evangelist at Postman. Studying the tech, business & politics of APIs since 2010. Presidential Innovation Fellow during the Obama administration.
  • \n
  • Ulysse Carion, the creator of JSON Type Definition specification.
  • \n
\n

Gajus Kuizinas will host the event.

\n

Please register here.

\n'},{title:"Ajv online event video uploaded",frontmatter:{news:!0,title:"Ajv online event video uploaded",date:"2021-05-24T00:00:00.000Z",more:!1},regularPath:"/news/2021-05-24-ajv-online-event-video.html",relativePath:"news/2021-05-24-ajv-online-event-video.md",key:"v-2abeb1ab",path:"/news/2021-05-24-ajv-online-event-video.html",excerpt:'

Huge thanks to everybody who joined, and to the speakers! The video of the event is available on YouTube.

\n'},{title:"Ajv News",frontmatter:{newsIndex:!0,editLink:!1},regularPath:"/news/",relativePath:"news/README.md",key:"v-506a67bc",path:"/news/"},{title:"Ajv options",frontmatter:{},regularPath:"/options.html",relativePath:"options.md",key:"v-7bf93309",path:"/options.html",headers:[{level:2,title:"Usage",slug:"usage"},{level:2,title:"Option defaults",slug:"option-defaults"},{level:2,title:"Strict mode options",slug:"strict-mode-options"},{level:3,title:"strict",slug:"strict"},{level:3,title:"strictSchema",slug:"strictschema"},{level:3,title:"strictNumbers",slug:"strictnumbers"},{level:3,title:"strictTypes",slug:"stricttypes"},{level:3,title:"strictTuples",slug:"stricttuples"},{level:3,title:"strictRequired",slug:"strictrequired"},{level:3,title:"allowUnionTypes",slug:"allowuniontypes"},{level:3,title:"allowMatchingProperties",slug:"allowmatchingproperties"},{level:3,title:"validateFormats",slug:"validateformats"},{level:2,title:"Validation and reporting options",slug:"validation-and-reporting-options"},{level:3,title:"$data",slug:"data"},{level:3,title:"allErrors",slug:"allerrors"},{level:3,title:"verbose",slug:"verbose"},{level:3,title:"discriminator",slug:"discriminator"},{level:3,title:"unicodeRegExp",slug:"unicoderegexp"},{level:3,title:"timestamp",slug:"timestamp"},{level:3,title:"parseDate",slug:"parsedate"},{level:3,title:"allowDate",slug:"allowdate"},{level:3,title:"int32range",slug:"int32range"},{level:3,title:"$comment",slug:"comment"},{level:3,title:"formats",slug:"formats"},{level:3,title:"keywords",slug:"keywords"},{level:3,title:"schemas",slug:"schemas"},{level:3,title:"logger",slug:"logger"},{level:3,title:"loadSchema",slug:"loadschema"},{level:2,title:"Options to modify validated data",slug:"options-to-modify-validated-data"},{level:3,title:"removeAdditional",slug:"removeadditional"},{level:3,title:"useDefaults",slug:"usedefaults"},{level:3,title:"coerceTypes",slug:"coercetypes"},{level:2,title:"Advanced options",slug:"advanced-options"},{level:3,title:"meta",slug:"meta"},{level:3,title:"validateSchema",slug:"validateschema"},{level:3,title:"addUsedSchema",slug:"addusedschema"},{level:3,title:"inlineRefs",slug:"inlinerefs"},{level:3,title:"passContext",slug:"passcontext"},{level:3,title:"loopRequired",slug:"looprequired"},{level:3,title:"loopEnum",slug:"loopenum"},{level:3,title:"ownProperties",slug:"ownproperties"},{level:3,title:"multipleOfPrecision",slug:"multipleofprecision"},{level:3,title:"messages",slug:"messages"},{level:3,title:"uriResolver",slug:"uriresolver"},{level:3,title:"code",slug:"code"}]},{title:"Microsoft FOSS award",frontmatter:{news:!0,title:"Microsoft FOSS award",date:"2021-07-22T00:00:00.000Z",more:!1},regularPath:"/news/2021-07-22-ajv-microsoft-foss-fund-award.html",relativePath:"news/2021-07-22-ajv-microsoft-foss-fund-award.md",key:"v-959a2c2e",path:"/news/2021-07-22-ajv-microsoft-foss-fund-award.html",excerpt:'

Ajv was awarded a sponsorship from Microsoft FOSS fund - huge thanks to Microsoft and the engineers who voted to support Ajv development.

\n

This award will contribute to a long term maintenance of Ajv.

\n'},{title:"Extending Ajv",frontmatter:{},regularPath:"/packages/",relativePath:"packages/README.md",key:"v-07fb5e62",path:"/packages/",headers:[{level:2,title:"Plugins",slug:"plugins"},{level:2,title:"Related packages",slug:"related-packages"}]},{frontmatter:{editLink:"https://github.com/ajv-validator/ajv-errors/edit/master/README.md"},regularPath:"/packages/ajv-errors.html",relativePath:"packages/ajv-errors.md",key:"v-b99d2c2e",path:"/packages/ajv-errors.html",headers:[{level:2,title:"Contents",slug:"contents"},{level:2,title:"Install",slug:"install"},{level:2,title:"Usage",slug:"usage"},{level:3,title:"Single message",slug:"single-message"},{level:3,title:"Messages for keywords",slug:"messages-for-keywords"},{level:3,title:"Messages for properties and items",slug:"messages-for-properties-and-items"},{level:3,title:"Default message",slug:"default-message"},{level:2,title:"Templates",slug:"templates"},{level:2,title:"Options",slug:"options"},{level:2,title:"Supporters",slug:"supporters"},{level:2,title:"Enterprise support",slug:"enterprise-support"},{level:2,title:"Security contact",slug:"security-contact"},{level:2,title:"License",slug:"license"}]},{frontmatter:{editLink:"https://github.com/ajv-validator/ajv-cli/edit/master/README.md"},regularPath:"/packages/ajv-cli.html",relativePath:"packages/ajv-cli.md",key:"v-19f2c039",path:"/packages/ajv-cli.html",headers:[{level:2,title:"Contents",slug:"contents"},{level:2,title:"Installation",slug:"installation"},{level:2,title:"JSON schema language and version",slug:"json-schema-language-and-version"},{level:2,title:"Commands",slug:"commands"},{level:3,title:"Help command",slug:"help-command"},{level:3,title:"Validate data",slug:"validate-data"},{level:3,title:"Compile schemas",slug:"compile-schemas"},{level:3,title:"Migrate schemas",slug:"migrate-schemas"},{level:3,title:"Test validation result",slug:"test-validation-result"},{level:2,title:"Ajv options",slug:"ajv-options"},{level:2,title:"Version History",slug:"version-history"},{level:2,title:"Licence",slug:"licence"}]},{frontmatter:{editLink:"https://github.com/ajv-validator/ajv-i18n/edit/master/README.md"},regularPath:"/packages/ajv-i18n.html",relativePath:"packages/ajv-i18n.md",key:"v-7f55ccc9",path:"/packages/ajv-i18n.html",headers:[{level:2,title:"Supported locales",slug:"supported-locales"},{level:2,title:"Install",slug:"install"},{level:2,title:"Usage",slug:"usage"},{level:2,title:"Tests",slug:"tests"},{level:2,title:"Contributing",slug:"contributing"},{level:2,title:"Contributors of locales",slug:"contributors-of-locales"},{level:2,title:"Enterprise support",slug:"enterprise-support"},{level:2,title:"Security contact",slug:"security-contact"},{level:2,title:"License",slug:"license"}]},{title:"Security considerations",frontmatter:{},regularPath:"/security.html",relativePath:"security.md",key:"v-bb53a316",path:"/security.html",headers:[{level:2,title:"Security contact",slug:"security-contact"},{level:2,title:"Untrusted schemas",slug:"untrusted-schemas"},{level:2,title:"Circular references in JavaScript objects",slug:"circular-references-in-javascript-objects"},{level:2,title:"Security risks of trusted schemas",slug:"security-risks-of-trusted-schemas"},{level:2,title:"ReDoS attack",slug:"redos-attack"},{level:2,title:"Content Security Policy",slug:"content-security-policy"}]},{frontmatter:{editLink:"https://github.com/ajv-validator/ajv-formats/edit/master/README.md"},regularPath:"/packages/ajv-formats.html",relativePath:"packages/ajv-formats.md",key:"v-6731dec1",path:"/packages/ajv-formats.html",headers:[{level:2,title:"Usage",slug:"usage"},{level:2,title:"Formats",slug:"formats"},{level:2,title:"Keywords to compare values: formatMaximum / formatMinimum and formatExclusiveMaximum / formatExclusiveMinimum",slug:"keywords-to-compare-values-formatmaximum-formatminimum-and-formatexclusivemaximum-formatexclusiveminimum"},{level:2,title:"Options",slug:"options"},{level:2,title:"Tests",slug:"tests"},{level:2,title:"License",slug:"license"}]},{frontmatter:{editLink:"https://github.com/ajv-validator/ajv-keywords/edit/master/README.md"},regularPath:"/packages/ajv-keywords.html",relativePath:"packages/ajv-keywords.md",key:"v-bf7e876e",path:"/packages/ajv-keywords.html",headers:[{level:2,title:"Contents",slug:"contents"},{level:2,title:"Install",slug:"install"},{level:2,title:"Usage",slug:"usage"},{level:2,title:"Keywords",slug:"keywords"},{level:3,title:"Types",slug:"types"},{level:3,title:"Keywords for numbers",slug:"keywords-for-numbers"},{level:3,title:"Keywords for strings",slug:"keywords-for-strings"},{level:3,title:"Keywords for arrays",slug:"keywords-for-arrays"},{level:3,title:"Keywords for objects",slug:"keywords-for-objects"},{level:3,title:"Keywords for all types",slug:"keywords-for-all-types"},{level:2,title:"Security contact",slug:"security-contact"},{level:2,title:"Open-source software support",slug:"open-source-software-support"},{level:2,title:"License",slug:"license"}]},{title:"What users say",frontmatter:{},regularPath:"/testimonials.html",relativePath:"testimonials.md",key:"v-90fdf4e6",path:"/testimonials.html"},{title:"Strict mode",frontmatter:{},regularPath:"/strict-mode.html",relativePath:"strict-mode.md",key:"v-74774829",path:"/strict-mode.html",headers:[{level:2,title:"JSON Type Definition schemas",slug:"json-type-definition-schemas"},{level:2,title:"JSON Schema schemas",slug:"json-schema-schemas"},{level:3,title:"Prohibit ignored keywords",slug:"prohibit-ignored-keywords"},{level:3,title:"Prevent unexpected validation",slug:"prevent-unexpected-validation"},{level:3,title:"Strict types",slug:"strict-types"},{level:3,title:"Strict number validation",slug:"strict-number-validation"}]},{title:"Changes from Ajv v6.12.6 to v8.0.0",frontmatter:{},regularPath:"/v6-to-v8-migration.html",relativePath:"v6-to-v8-migration.md",key:"v-114a7465",path:"/v6-to-v8-migration.html",headers:[{level:2,title:"New features",slug:"new-features"},{level:2,title:"Better TypeScript support",slug:"better-typescript-support"},{level:2,title:"Potential migration difficulties",slug:"potential-migration-difficulties"},{level:2,title:"API changes",slug:"api-changes"},{level:3,title:"Added options",slug:"added-options"},{level:3,title:"Changed options",slug:"changed-options"},{level:3,title:"Removed options",slug:"removed-options"}]},{title:"Standalone validation code",frontmatter:{},regularPath:"/standalone.html",relativePath:"standalone.md",key:"v-20f55eeb",path:"/standalone.html",headers:[{level:2,title:"Two-step process",slug:"two-step-process"},{level:3,title:"Generating function(s) using CLI",slug:"generating-function-s-using-cli"},{level:3,title:"Generating using the JS library",slug:"generating-using-the-js-library"},{level:2,title:"Using the validation function(s)",slug:"using-the-validation-function-s"},{level:3,title:"Validating a single schemas using the JS library - ES6 and CJS",slug:"validating-a-single-schemas-using-the-js-library-es6-and-cjs"},{level:3,title:"Validating multiple schemas using the JS library - ES6 and CJS",slug:"validating-multiple-schemas-using-the-js-library-es6-and-cjs"},{level:3,title:"Validating multiple schemas using the JS library - ES6 and ESM",slug:"validating-multiple-schemas-using-the-js-library-es6-and-esm"},{level:3,title:"Requirement at runtime",slug:"requirement-at-runtime"},{level:2,title:"Configuration and limitations",slug:"configuration-and-limitations"}]}],themeConfig:{logo:"/img/ajv.svg",nav:[{text:"Home",link:"/"},{text:"Guide",items:[{link:"/guide/why-ajv",text:"Why use Ajv"},{link:"/guide/getting-started",text:"Getting started"},{link:"/guide/typescript",text:"Using with TypeScript"},{link:"/guide/schema-language",text:"Choosing schema language"},{link:"/guide/managing-schemas",text:"Managing schemas"},{link:"/guide/combining-schemas",text:"Combining schemas"},{link:"/guide/formats",text:"Format validation"},{link:"/guide/modifying-data",text:"Modifying data"},{link:"/guide/user-keywords",text:"User-defined keywords"},{link:"/guide/async-validation",text:"Asynchronous validation"},{link:"/guide/environments",text:"Execution environments"}]},{text:"Reference",items:[{link:"/api",text:"API Reference"},{link:"/options",text:"Ajv options"},{link:"/json-schema",text:"JSON Schema"},{link:"/json-type-definition",text:"JSON Type Definition"},{link:"/strict-mode",text:"Strict mode"},{link:"/standalone",text:"Standalone validation code"},{link:"/keywords",text:"User defined keywords"},{link:"/coercion",text:"Type coercion rules"}]},{text:"Learn more",items:[{text:"Extending Ajv",items:[{link:"/packages/",text:"Extending Ajv"},{link:"/packages/ajv-cli",text:"ajv-cli"},{link:"/packages/ajv-errors",text:"ajv-errors"},{link:"/packages/ajv-formats",text:"ajv-formats"},{link:"/packages/ajv-i18n",text:"ajv-i18n"},{link:"/packages/ajv-keywords",text:"ajv-keywords"}]},{text:"Contributors",items:[{link:"/contributing",text:"Contributing guide"},{link:"/codegen",text:"Code generation design"},{link:"/components",text:"Code components"},{link:"/code_of_conduct",text:"Code of Conduct"}]},{text:"Information",items:[{link:"/news/",text:"News"},{link:"/faq",text:"FAQ"},{link:"/security",text:"Security"},{link:"/v6-to-v8-migration",text:"Migrate from v6"},{link:"/testimonials",text:"What users say"},{link:"/license",text:"License"}]}]}],sidebar:[{title:"Guide",children:["/guide/why-ajv","/guide/getting-started","/guide/typescript","/guide/schema-language","/guide/managing-schemas","/guide/combining-schemas","/guide/formats","/guide/modifying-data","/guide/user-keywords","/guide/async-validation","/guide/environments"]},{title:"Reference",children:["/api","/options","/json-schema","/json-type-definition","/strict-mode","/standalone","/keywords","/coercion"]},{title:"Extending Ajv",children:[["/packages/","Extending Ajv"],["/packages/ajv-formats","ajv-formats"],["/packages/ajv-keywords","ajv-keywords"],["/packages/ajv-errors","ajv-errors"],["/packages/ajv-i18n","ajv-i18n"],["/packages/ajv-cli","ajv-cli"]]},{title:"Contributors",children:["/contributing","/codegen","/components",["/code_of_conduct","Code of conduct"]]},{title:"Information",children:["/news/","/faq","/security",["/v6-to-v8-migration","Migrate from v6 to v8"],"/testimonials",["/license","License"]]}],repo:"ajv-validator/ajv",docsDir:"docs",editLinks:!0,activeHeaderLinks:!1}};n(233);Kn.component("Button",()=>Promise.all([n.e(0),n.e(25)]).then(n.bind(null,377))),Kn.component("Column",()=>Promise.all([n.e(0),n.e(26)]).then(n.bind(null,378))),Kn.component("Columns",()=>Promise.all([n.e(0),n.e(27)]).then(n.bind(null,434))),Kn.component("Contributors",()=>Promise.all([n.e(0),n.e(21)]).then(n.bind(null,379))),Kn.component("Feature",()=>Promise.all([n.e(0),n.e(22)]).then(n.bind(null,380))),Kn.component("Features",()=>Promise.all([n.e(0),n.e(28)]).then(n.bind(null,435))),Kn.component("FooterColumn",()=>Promise.all([n.e(0),n.e(29)]).then(n.bind(null,381))),Kn.component("FooterColumns",()=>Promise.all([n.e(0),n.e(30)]).then(n.bind(null,436))),Kn.component("GitHub",()=>Promise.all([n.e(0),n.e(31)]).then(n.bind(null,382))),Kn.component("HeroSection",()=>Promise.all([n.e(0),n.e(23)]).then(n.bind(null,437))),Kn.component("HomePage",()=>Promise.all([n.e(0),n.e(32)]).then(n.bind(null,438))),Kn.component("HomeSection",()=>Promise.all([n.e(0),n.e(33)]).then(n.bind(null,383))),Kn.component("NewsHome",()=>Promise.all([n.e(0),n.e(34)]).then(n.bind(null,384))),Kn.component("NewsIndex",()=>n.e(43).then(n.bind(null,385))),Kn.component("NewsPost",()=>Promise.all([n.e(0),n.e(14)]).then(n.bind(null,386))),Kn.component("NewsPostMeta",()=>Promise.all([n.e(0),n.e(18)]).then(n.bind(null,387))),Kn.component("Projects",()=>Promise.all([n.e(0),n.e(35)]).then(n.bind(null,439))),Kn.component("Sponsors",()=>Promise.all([n.e(0),n.e(36)]).then(n.bind(null,388))),Kn.component("Subscribe",()=>Promise.all([n.e(0),n.e(37)]).then(n.bind(null,440))),Kn.component("Testimonial",()=>Promise.all([n.e(0),n.e(38)]).then(n.bind(null,389))),Kn.component("Testimonials",()=>Promise.all([n.e(0),n.e(39)]).then(n.bind(null,441))),Kn.component("Badge",()=>Promise.all([n.e(0),n.e(4)]).then(n.bind(null,390))),Kn.component("CodeBlock",()=>Promise.all([n.e(0),n.e(5)]).then(n.bind(null,373))),Kn.component("CodeGroup",()=>Promise.all([n.e(0),n.e(6)]).then(n.bind(null,374)));n(234);var Es=[{},({Vue:e})=>{e.mixin({computed:{$dataBlock(){return this.$options.__data__block__}}})},{},{}],As=[];class Ts extends class{constructor(){this.store=new Kn({data:{state:{}}})}$get(e){return this.store.state[e]}$set(e,t){Kn.set(this.store.state,e,t)}$emit(...e){this.store.$emit(...e)}$on(...e){this.store.$on(...e)}}{}Object.assign(Ts.prototype,{getPageAsyncComponent:ss,getLayoutAsyncComponent:ls,getAsyncComponent:cs,getVueComponent:us});var Ls={install(e){const t=new Ts;e.$vuepress=t,e.prototype.$vuepress=t}};function Rs(e,t){const n=t.toLowerCase();return e.options.routes.some(e=>e.path.toLowerCase()===n)}var Ms={props:{pageKey:String,slotKey:{type:String,default:"default"}},render(e){const t=this.pageKey||this.$parent.$page.key;return ps("pageKey",t),Kn.component(t)||Kn.component(t,ss(t)),Kn.component(t)?e(t):e("")}},Ns={functional:!0,props:{slotKey:String,required:!0},render:(e,{props:t,slots:n})=>e("div",{class:["content__"+t.slotKey]},n()[t.slotKey])},Is={computed:{openInNewWindowTitle(){return this.$themeLocaleConfig.openNewWindowText||"(opens new window)"}}},Ds=(n(235),n(236),Object(Os.a)(Is,(function(){var e=this._self._c;return e("span",[e("svg",{staticClass:"icon outbound",attrs:{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"}},[e("path",{attrs:{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}}),this._v(" "),e("polygon",{attrs:{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"}})]),this._v(" "),e("span",{staticClass:"sr-only"},[this._v(this._s(this.openInNewWindowTitle))])])}),[],!1,null,null,null).exports),Fs={functional:!0,render(e,{parent:t,children:n}){if(t._isMounted)return n;t.$once("hook:mounted",()=>{t.$forceUpdate()})}};Kn.config.productionTip=!1,Kn.use(Va),Kn.use(Ls),Kn.mixin(function(e,t,n=Kn){!function(e){e.locales&&Object.keys(e.locales).forEach(t=>{e.locales[t].path=t});Object.freeze(e)}(t),n.$vuepress.$set("siteData",t);const r=new(e(n.$vuepress.$get("siteData"))),o=Object.getOwnPropertyDescriptors(Object.getPrototypeOf(r)),i={};return Object.keys(o).reduce((e,t)=>(t.startsWith("$")&&(e[t]=o[t].get),e),i),{computed:i}}(e=>class{setPage(e){this.__page=e}get $site(){return e}get $themeConfig(){return this.$site.themeConfig}get $frontmatter(){return this.$page.frontmatter}get $localeConfig(){const{locales:e={}}=this.$site;let t,n;for(const r in e)"/"===r?n=e[r]:0===this.$page.path.indexOf(r)&&(t=e[r]);return t||n||{}}get $siteTitle(){return this.$localeConfig.title||this.$site.title||""}get $canonicalUrl(){const{canonicalUrl:e}=this.$page.frontmatter;return"string"==typeof e&&e}get $title(){const e=this.$page,{metaTitle:t}=this.$page.frontmatter;if("string"==typeof t)return t;const n=this.$siteTitle,r=e.frontmatter.home?null:e.frontmatter.title||e.title;return n?r?r+" | "+n:n:r||"VuePress"}get $description(){const e=function(e){if(e){const t=e.filter(e=>"description"===e.name)[0];if(t)return t.content}}(this.$page.frontmatter.meta);return e||(this.$page.frontmatter.description||this.$localeConfig.description||this.$site.description||"")}get $lang(){return this.$page.frontmatter.lang||this.$localeConfig.lang||"en-US"}get $localePath(){return this.$localeConfig.path||"/"}get $themeLocaleConfig(){return(this.$site.themeConfig.locales||{})[this.$localePath]||{}}get $page(){return this.__page?this.__page:function(e,t){for(let n=0;nn||(e.hash?!Kn.$vuepress.$get("disableScrollBehavior")&&{selector:decodeURIComponent(e.hash)}:{x:0,y:0})});!function(e){e.beforeEach((t,n,r)=>{if(Rs(e,t.path))r();else if(/(\/|\.html)$/.test(t.path))if(/\/$/.test(t.path)){const n=t.path.replace(/\/$/,"")+".html";Rs(e,n)?r(n):r()}else r();else{const n=t.path+"/",o=t.path+".html";Rs(e,o)?r(o):Rs(e,n)?r(n):r()}})}(n);const r={};try{await Promise.all(Es.filter(e=>"function"==typeof e).map(t=>t({Vue:Kn,options:r,router:n,siteData:$s,isServer:e})))}catch(e){console.error(e)}return{app:new Kn(Object.assign(r,{router:n,render:e=>e("div",{attrs:{id:"app"}},[e("RouterView",{ref:"layout"}),e("div",{class:"global-ui"},As.map(t=>e(t)))])})),router:n}}(!1).then(({app:e,router:t})=>{t.onReady(()=>{e.$mount("#app")})})}]); \ No newline at end of file diff --git a/code_of_conduct/index.html b/code_of_conduct/index.html index 9b0079070..3035305be 100644 --- a/code_of_conduct/index.html +++ b/code_of_conduct/index.html @@ -18,8 +18,8 @@ - - + +
- + diff --git a/codegen.html b/codegen.html index c93145f17..24418aca1 100644 --- a/codegen.html +++ b/codegen.html @@ -18,8 +18,8 @@ - - + +
- + diff --git a/coercion.html b/coercion.html index d57742f46..19f4905ab 100644 --- a/coercion.html +++ b/coercion.html @@ -18,8 +18,8 @@ - - + +
- + diff --git a/components.html b/components.html index 8f55fc22f..7c195b4cb 100644 --- a/components.html +++ b/components.html @@ -18,8 +18,8 @@ - - + +
- + diff --git a/contributing/index.html b/contributing/index.html index 66a03d83a..e7629926b 100644 --- a/contributing/index.html +++ b/contributing/index.html @@ -18,8 +18,8 @@ - - + +
- + diff --git a/faq.html b/faq.html index d20309de0..db1d84743 100644 --- a/faq.html +++ b/faq.html @@ -18,8 +18,8 @@ - - + +
- + diff --git a/guide/async-validation.html b/guide/async-validation.html index 6f951c328..0d4241ab3 100644 --- a/guide/async-validation.html +++ b/guide/async-validation.html @@ -18,8 +18,8 @@ - - + +
- + diff --git a/guide/combining-schemas.html b/guide/combining-schemas.html index 2c15c627a..b11165b7f 100644 --- a/guide/combining-schemas.html +++ b/guide/combining-schemas.html @@ -18,8 +18,8 @@ - - + +
- + diff --git a/guide/environments.html b/guide/environments.html index 27a2e13a7..e8010cc37 100644 --- a/guide/environments.html +++ b/guide/environments.html @@ -18,8 +18,8 @@ - - + +
- + diff --git a/guide/formats.html b/guide/formats.html index 585a66acd..5349656f8 100644 --- a/guide/formats.html +++ b/guide/formats.html @@ -18,8 +18,8 @@ - - + +
- + diff --git a/guide/getting-started.html b/guide/getting-started.html index 841ac9bbc..ed251864a 100644 --- a/guide/getting-started.html +++ b/guide/getting-started.html @@ -18,8 +18,8 @@ - - + +
- + diff --git a/guide/managing-schemas.html b/guide/managing-schemas.html index 8dcc08ac9..cdf8d0dd5 100644 --- a/guide/managing-schemas.html +++ b/guide/managing-schemas.html @@ -18,8 +18,8 @@ - - + +
- + diff --git a/guide/modifying-data.html b/guide/modifying-data.html index e6db28df7..91b538233 100644 --- a/guide/modifying-data.html +++ b/guide/modifying-data.html @@ -18,8 +18,8 @@ - - + +
- + diff --git a/guide/schema-language.html b/guide/schema-language.html index e73bc8361..8220be206 100644 --- a/guide/schema-language.html +++ b/guide/schema-language.html @@ -18,8 +18,8 @@ - - + +
- + diff --git a/guide/typescript.html b/guide/typescript.html index 5b258c9f4..dd3019d97 100644 --- a/guide/typescript.html +++ b/guide/typescript.html @@ -18,8 +18,8 @@ - - + +
- + diff --git a/guide/user-keywords.html b/guide/user-keywords.html index d6f1905ea..fc0cfc086 100644 --- a/guide/user-keywords.html +++ b/guide/user-keywords.html @@ -18,8 +18,8 @@ - - + +
- + diff --git a/guide/why-ajv.html b/guide/why-ajv.html index 15a8ad82f..4bde61600 100644 --- a/guide/why-ajv.html +++ b/guide/why-ajv.html @@ -18,8 +18,8 @@ - - + +
- + diff --git a/index.html b/index.html index 744a0a6df..cb2122ccb 100644 --- a/index.html +++ b/index.html @@ -18,8 +18,8 @@ - - + +
All news

# Contributors

Ajv is free to use and open-source that many developers contributed to. Join us!

epoberezkin - + spaced4ndy - + erikbrinkman - + jasoniangreen - + dependabot[bot] - + PBug90 - + blakeembrey - + sambauers - + gajus - + meirotstein - + Tyharo1 - + igor-savin-ht - + b4h0-c4t - + willfarrell - + boenrobot - + yume-chan - + GrahamLea - + franciscomorais - + asaid-0 - + domoritz - + imbstack - + pithu - + realityking - + efebarlas - + awlayton - + pcwiek - + rehanvdm - + farrago - + SoAsEr - + kroky - + Delagen - + YChebotaev - + bhvngt - + t7yang - + teq0 - + wuweiss - + zekth - + egfx-notifications - + brendo - + HotelDon - + donaldpipowitch - + mummybot - + G-Rath - + HolgerJeromin - + Nonemoticoner - + MichaelDeBoey - + mattpolzin - + monkeywithacupcake - + ktrueda - + marshall007 - + lucassaid - - caub - + + mxsgx + philsturgeon - + carlo-quinonez - + radekmie - + merlindorin - + Romakita - + rbuckton - + ryanmeador - + mighty1231 - + simon04 - + SirLich - + krenor - + stuartpb - + TIBCOeddie - + bearmini - + not-an-aardvark - - mxsgx - + m00s - + mbroadst - + MattiAstedrone - + MikeRalphson - + tyok - + MrJithil - + mychaelgo - + natflow - + nwoltman - + + blottn + nimerritt - + nicksrandall - + Noam3kCH - + eventlistener - + Opticsponge - + orgads - + papb - + thernstig - + jsdevel - + oldmud0 - + ossdev07 - + pskfyi - + qwertyforce - + rek - + sahilda - + schokotets - + superfaz - + tridium - + vlbee - + aladdin-add - + wyfo - + duxing - + anchnk - + ChALkeR - + TommyDew42 - + koba04 - + isTravis - + cvlab - + vargaeric - + villasv - + aristov - + billytrend - + byr-gdp - + cjancsar - + dfeufel - + ehmicky - + fpicalausa - + franrolando - + fridays - + jonganc - + + caub + dalcib - + dannyb648 - + dancasey - + rotu - + FunkyDck - + darcyparker - + daveisfera - + dsanders11 - + Delapouite - + dimitropoulos - + keyten - + thetric - + rubiagatra - + forivall - + ecwyne - + jonathanGB - + ahmdsolmn - + Alexsey - + avanelli - + anslzo - + asprouse - + andyscott - + vixalien - + kulakowka - + vendeza - + benasher44 - + bradjones1 - + eventualbuddha - + cbrwflo - + cpillsbury - + ChuntaoLu - + delavara - + smithc10 - + jboavida - + justinpowers - + kapouer - + lehni - + platinumazure - + kpping - + laurens - + johanlelan - + leonardovillela - + LinusU - + alazyzombie - + jsbrain - + Eomm - + VIEWVIEWVIEW - + mduu - + dzuremar - + EtaiG - + gj - + rgeerts - + garrows - + gurgunday - + hadrien-toma - + seriousme - + hans-kinnek - + handrews - + is2ei - + idangozlan - + ivansieder - + P0lip - + JamesJansson - + mrjgreen - + jrr jonasfj
- + diff --git a/json-schema.html b/json-schema.html index 456b55b68..1c9c5466e 100644 --- a/json-schema.html +++ b/json-schema.html @@ -18,8 +18,8 @@ - - + +
- + diff --git a/json-type-definition.html b/json-type-definition.html index 6cd9b1a3c..f23bec4b5 100644 --- a/json-type-definition.html +++ b/json-type-definition.html @@ -18,8 +18,8 @@ - - + +
- + diff --git a/keywords.html b/keywords.html index 6fba86138..f039cdfed 100644 --- a/keywords.html +++ b/keywords.html @@ -18,8 +18,8 @@ - - + +
- + diff --git a/license.html b/license.html index 3fa2c3d8f..b3ebeeb2f 100644 --- a/license.html +++ b/license.html @@ -18,8 +18,8 @@ - - + +
- + diff --git a/news/2020-08-14-mozilla-grant-openjs-foundation.html b/news/2020-08-14-mozilla-grant-openjs-foundation.html index c4ca9e898..1e077c803 100644 --- a/news/2020-08-14-mozilla-grant-openjs-foundation.html +++ b/news/2020-08-14-mozilla-grant-openjs-foundation.html @@ -18,8 +18,8 @@ - - + +
- + diff --git a/news/2020-12-15-ajv-version-7-released.html b/news/2020-12-15-ajv-version-7-released.html index 798efc8f4..0fa976e5f 100644 --- a/news/2020-12-15-ajv-version-7-released.html +++ b/news/2020-12-15-ajv-version-7-released.html @@ -18,8 +18,8 @@ - - + +
- + diff --git a/news/2021-03-07-ajv-supports-json-type-definition.html b/news/2021-03-07-ajv-supports-json-type-definition.html index 000da26c5..03c62f840 100644 --- a/news/2021-03-07-ajv-supports-json-type-definition.html +++ b/news/2021-03-07-ajv-supports-json-type-definition.html @@ -18,8 +18,8 @@ - - + +
- + diff --git a/news/2021-03-27-ajv-version-8-released.html b/news/2021-03-27-ajv-version-8-released.html index 7ff2f43f7..66440b0e0 100644 --- a/news/2021-03-27-ajv-version-8-released.html +++ b/news/2021-03-27-ajv-version-8-released.html @@ -18,8 +18,8 @@ - - + +
- + diff --git a/news/2021-04-24-ajv-online-event.html b/news/2021-04-24-ajv-online-event.html index 005a6bae0..a0cd2c898 100644 --- a/news/2021-04-24-ajv-online-event.html +++ b/news/2021-04-24-ajv-online-event.html @@ -18,8 +18,8 @@ - - + +
- + diff --git a/news/2021-05-24-ajv-online-event-video.html b/news/2021-05-24-ajv-online-event-video.html index 80233bb24..df515264b 100644 --- a/news/2021-05-24-ajv-online-event-video.html +++ b/news/2021-05-24-ajv-online-event-video.html @@ -18,8 +18,8 @@ - - + + - + diff --git a/news/2021-07-22-ajv-microsoft-foss-fund-award.html b/news/2021-07-22-ajv-microsoft-foss-fund-award.html index bc5724474..080dabe6b 100644 --- a/news/2021-07-22-ajv-microsoft-foss-fund-award.html +++ b/news/2021-07-22-ajv-microsoft-foss-fund-award.html @@ -18,8 +18,8 @@ - - + +
- + diff --git a/news/index.html b/news/index.html index 94a30a7bc..2fbe82ddb 100644 --- a/news/index.html +++ b/news/index.html @@ -18,8 +18,8 @@ - - + +
- + diff --git a/options.html b/options.html index e1044f3fb..a964eb99f 100644 --- a/options.html +++ b/options.html @@ -18,8 +18,8 @@ - - + +
- + diff --git a/packages/ajv-cli.html b/packages/ajv-cli.html index 8835c947b..8c28fd785 100644 --- a/packages/ajv-cli.html +++ b/packages/ajv-cli.html @@ -18,8 +18,8 @@ - - + +
- + diff --git a/packages/ajv-errors.html b/packages/ajv-errors.html index fd7e1dba4..d05d4e2a0 100644 --- a/packages/ajv-errors.html +++ b/packages/ajv-errors.html @@ -18,8 +18,8 @@ - - + +
- + diff --git a/packages/ajv-formats.html b/packages/ajv-formats.html index d123d37af..41de76716 100644 --- a/packages/ajv-formats.html +++ b/packages/ajv-formats.html @@ -18,8 +18,8 @@ - - + +
- + diff --git a/packages/ajv-i18n.html b/packages/ajv-i18n.html index ad85d7862..b1fcdb2f9 100644 --- a/packages/ajv-i18n.html +++ b/packages/ajv-i18n.html @@ -18,8 +18,8 @@ - - + +
- + diff --git a/packages/ajv-keywords.html b/packages/ajv-keywords.html index 76af73ee4..044bfb41c 100644 --- a/packages/ajv-keywords.html +++ b/packages/ajv-keywords.html @@ -18,8 +18,8 @@ - - + +
- + diff --git a/packages/index.html b/packages/index.html index ba58a2996..bfa41b89d 100644 --- a/packages/index.html +++ b/packages/index.html @@ -18,8 +18,8 @@ - - + +
- + diff --git a/security.html b/security.html index c5c035137..4ed7bf800 100644 --- a/security.html +++ b/security.html @@ -18,8 +18,8 @@ - - + +
- + diff --git a/standalone.html b/standalone.html index 5137ed681..8b5b0fbbd 100644 --- a/standalone.html +++ b/standalone.html @@ -18,8 +18,8 @@ - - + +
- + diff --git a/strict-mode.html b/strict-mode.html index 0d7c8d457..73f4033ae 100644 --- a/strict-mode.html +++ b/strict-mode.html @@ -18,8 +18,8 @@ - - + +
- + diff --git a/testimonials.html b/testimonials.html index d51ab0ebf..e0bb64264 100644 --- a/testimonials.html +++ b/testimonials.html @@ -18,8 +18,8 @@ - - + +
- + diff --git a/v6-to-v8-migration.html b/v6-to-v8-migration.html index 160756f2f..c46855e9b 100644 --- a/v6-to-v8-migration.html +++ b/v6-to-v8-migration.html @@ -18,8 +18,8 @@ - - + +