Coverage for fastapi/applications.py: 100%

170 statements  

« prev     ^ index     » next       coverage.py v7.6.1, created at 2025-12-04 08:29 +0000

1from enum import Enum 1abcdefg

2from typing import ( 1abcdefg

3 Any, 

4 Awaitable, 

5 Callable, 

6 Coroutine, 

7 Dict, 

8 List, 

9 Optional, 

10 Sequence, 

11 Type, 

12 TypeVar, 

13 Union, 

14) 

15 

16from annotated_doc import Doc 1abcdefg

17from fastapi import routing 1abcdefg

18from fastapi.datastructures import Default, DefaultPlaceholder 1abcdefg

19from fastapi.exception_handlers import ( 1abcdefg

20 http_exception_handler, 

21 request_validation_exception_handler, 

22 websocket_request_validation_exception_handler, 

23) 

24from fastapi.exceptions import RequestValidationError, WebSocketRequestValidationError 1abcdefg

25from fastapi.logger import logger 1abcdefg

26from fastapi.middleware.asyncexitstack import AsyncExitStackMiddleware 1abcdefg

27from fastapi.openapi.docs import ( 1abcdefg

28 get_redoc_html, 

29 get_swagger_ui_html, 

30 get_swagger_ui_oauth2_redirect_html, 

31) 

32from fastapi.openapi.utils import get_openapi 1abcdefg

33from fastapi.params import Depends 1abcdefg

34from fastapi.types import DecoratedCallable, IncEx 1abcdefg

35from fastapi.utils import generate_unique_id 1abcdefg

36from starlette.applications import Starlette 1abcdefg

37from starlette.datastructures import State 1abcdefg

38from starlette.exceptions import HTTPException 1abcdefg

39from starlette.middleware import Middleware 1abcdefg

40from starlette.middleware.base import BaseHTTPMiddleware 1abcdefg

41from starlette.middleware.errors import ServerErrorMiddleware 1abcdefg

42from starlette.middleware.exceptions import ExceptionMiddleware 1abcdefg

43from starlette.requests import Request 1abcdefg

44from starlette.responses import HTMLResponse, JSONResponse, Response 1abcdefg

45from starlette.routing import BaseRoute 1abcdefg

46from starlette.types import ASGIApp, ExceptionHandler, Lifespan, Receive, Scope, Send 1abcdefg

47from typing_extensions import Annotated, deprecated 1abcdefg

48 

49AppType = TypeVar("AppType", bound="FastAPI") 1abcdefg

50 

51 

52class FastAPI(Starlette): 1abcdefg

53 """ 

54 `FastAPI` app class, the main entrypoint to use FastAPI. 

55 

56 Read more in the 

57 [FastAPI docs for First Steps](https://fastapi.tiangolo.com/tutorial/first-steps/). 

58 

59 ## Example 

60 

61 ```python 

62 from fastapi import FastAPI 

63 

64 app = FastAPI() 

65 ``` 

66 """ 

67 

68 def __init__( 1abcdefg

69 self: AppType, 

70 *, 

71 debug: Annotated[ 

72 bool, 

73 Doc( 

74 """ 

75 Boolean indicating if debug tracebacks should be returned on server 

76 errors. 

77 

78 Read more in the 

79 [Starlette docs for Applications](https://www.starlette.dev/applications/#instantiating-the-application). 

80 """ 

81 ), 

82 ] = False, 

83 routes: Annotated[ 

84 Optional[List[BaseRoute]], 

85 Doc( 

86 """ 

87 **Note**: you probably shouldn't use this parameter, it is inherited 

88 from Starlette and supported for compatibility. 

89 

90 --- 

91 

92 A list of routes to serve incoming HTTP and WebSocket requests. 

93 """ 

94 ), 

95 deprecated( 

96 """ 

97 You normally wouldn't use this parameter with FastAPI, it is inherited 

98 from Starlette and supported for compatibility. 

99 

100 In FastAPI, you normally would use the *path operation methods*, 

101 like `app.get()`, `app.post()`, etc. 

102 """ 

103 ), 

104 ] = None, 

105 title: Annotated[ 

106 str, 

107 Doc( 

108 """ 

109 The title of the API. 

110 

111 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

112 

113 Read more in the 

114 [FastAPI docs for Metadata and Docs URLs](https://fastapi.tiangolo.com/tutorial/metadata/#metadata-for-api). 

115 

116 **Example** 

117 

118 ```python 

119 from fastapi import FastAPI 

120 

121 app = FastAPI(title="ChimichangApp") 

122 ``` 

123 """ 

124 ), 

125 ] = "FastAPI", 

126 summary: Annotated[ 

127 Optional[str], 

128 Doc( 

129 """ 

130 A short summary of the API. 

131 

132 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

133 

134 Read more in the 

135 [FastAPI docs for Metadata and Docs URLs](https://fastapi.tiangolo.com/tutorial/metadata/#metadata-for-api). 

136 

137 **Example** 

138 

139 ```python 

140 from fastapi import FastAPI 

141 

142 app = FastAPI(summary="Deadpond's favorite app. Nuff said.") 

143 ``` 

144 """ 

145 ), 

146 ] = None, 

147 description: Annotated[ 

148 str, 

149 Doc( 

150 ''' 

151 A description of the API. Supports Markdown (using 

152 [CommonMark syntax](https://commonmark.org/)). 

153 

154 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

155 

156 Read more in the 

157 [FastAPI docs for Metadata and Docs URLs](https://fastapi.tiangolo.com/tutorial/metadata/#metadata-for-api). 

158 

159 **Example** 

160 

161 ```python 

162 from fastapi import FastAPI 

163 

164 app = FastAPI( 

165 description=""" 

166 ChimichangApp API helps you do awesome stuff. 🚀 

167 

168 ## Items 

169 

170 You can **read items**. 

171 

172 ## Users 

173 

174 You will be able to: 

175 

176 * **Create users** (_not implemented_). 

177 * **Read users** (_not implemented_). 

178 

179 """ 

180 ) 

181 ``` 

182 ''' 

183 ), 

184 ] = "", 

185 version: Annotated[ 

186 str, 

187 Doc( 

188 """ 

189 The version of the API. 

190 

191 **Note** This is the version of your application, not the version of 

192 the OpenAPI specification nor the version of FastAPI being used. 

193 

194 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

195 

196 Read more in the 

197 [FastAPI docs for Metadata and Docs URLs](https://fastapi.tiangolo.com/tutorial/metadata/#metadata-for-api). 

198 

199 **Example** 

200 

201 ```python 

202 from fastapi import FastAPI 

203 

204 app = FastAPI(version="0.0.1") 

205 ``` 

206 """ 

207 ), 

208 ] = "0.1.0", 

209 openapi_url: Annotated[ 

210 Optional[str], 

211 Doc( 

212 """ 

213 The URL where the OpenAPI schema will be served from. 

214 

215 If you set it to `None`, no OpenAPI schema will be served publicly, and 

216 the default automatic endpoints `/docs` and `/redoc` will also be 

217 disabled. 

218 

219 Read more in the 

220 [FastAPI docs for Metadata and Docs URLs](https://fastapi.tiangolo.com/tutorial/metadata/#openapi-url). 

221 

222 **Example** 

223 

224 ```python 

225 from fastapi import FastAPI 

226 

227 app = FastAPI(openapi_url="/api/v1/openapi.json") 

228 ``` 

229 """ 

230 ), 

231 ] = "/openapi.json", 

232 openapi_tags: Annotated[ 

233 Optional[List[Dict[str, Any]]], 

234 Doc( 

235 """ 

236 A list of tags used by OpenAPI, these are the same `tags` you can set 

237 in the *path operations*, like: 

238 

239 * `@app.get("/users/", tags=["users"])` 

240 * `@app.get("/items/", tags=["items"])` 

241 

242 The order of the tags can be used to specify the order shown in 

243 tools like Swagger UI, used in the automatic path `/docs`. 

244 

245 It's not required to specify all the tags used. 

246 

247 The tags that are not declared MAY be organized randomly or based 

248 on the tools' logic. Each tag name in the list MUST be unique. 

249 

250 The value of each item is a `dict` containing: 

251 

252 * `name`: The name of the tag. 

253 * `description`: A short description of the tag. 

254 [CommonMark syntax](https://commonmark.org/) MAY be used for rich 

255 text representation. 

256 * `externalDocs`: Additional external documentation for this tag. If 

257 provided, it would contain a `dict` with: 

258 * `description`: A short description of the target documentation. 

259 [CommonMark syntax](https://commonmark.org/) MAY be used for 

260 rich text representation. 

261 * `url`: The URL for the target documentation. Value MUST be in 

262 the form of a URL. 

263 

264 Read more in the 

265 [FastAPI docs for Metadata and Docs URLs](https://fastapi.tiangolo.com/tutorial/metadata/#metadata-for-tags). 

266 

267 **Example** 

268 

269 ```python 

270 from fastapi import FastAPI 

271 

272 tags_metadata = [ 

273 { 

274 "name": "users", 

275 "description": "Operations with users. The **login** logic is also here.", 

276 }, 

277 { 

278 "name": "items", 

279 "description": "Manage items. So _fancy_ they have their own docs.", 

280 "externalDocs": { 

281 "description": "Items external docs", 

282 "url": "https://fastapi.tiangolo.com/", 

283 }, 

284 }, 

285 ] 

286 

287 app = FastAPI(openapi_tags=tags_metadata) 

288 ``` 

289 """ 

290 ), 

291 ] = None, 

292 servers: Annotated[ 

293 Optional[List[Dict[str, Union[str, Any]]]], 

294 Doc( 

295 """ 

296 A `list` of `dict`s with connectivity information to a target server. 

297 

298 You would use it, for example, if your application is served from 

299 different domains and you want to use the same Swagger UI in the 

300 browser to interact with each of them (instead of having multiple 

301 browser tabs open). Or if you want to leave fixed the possible URLs. 

302 

303 If the servers `list` is not provided, or is an empty `list`, the 

304 `servers` property in the generated OpenAPI will be: 

305 

306 * a `dict` with a `url` value of the application's mounting point 

307 (`root_path`) if it's different from `/`. 

308 * otherwise, the `servers` property will be omitted from the OpenAPI 

309 schema. 

310 

311 Each item in the `list` is a `dict` containing: 

312 

313 * `url`: A URL to the target host. This URL supports Server Variables 

314 and MAY be relative, to indicate that the host location is relative 

315 to the location where the OpenAPI document is being served. Variable 

316 substitutions will be made when a variable is named in `{`brackets`}`. 

317 * `description`: An optional string describing the host designated by 

318 the URL. [CommonMark syntax](https://commonmark.org/) MAY be used for 

319 rich text representation. 

320 * `variables`: A `dict` between a variable name and its value. The value 

321 is used for substitution in the server's URL template. 

322 

323 Read more in the 

324 [FastAPI docs for Behind a Proxy](https://fastapi.tiangolo.com/advanced/behind-a-proxy/#additional-servers). 

325 

326 **Example** 

327 

328 ```python 

329 from fastapi import FastAPI 

330 

331 app = FastAPI( 

332 servers=[ 

333 {"url": "https://stag.example.com", "description": "Staging environment"}, 

334 {"url": "https://prod.example.com", "description": "Production environment"}, 

335 ] 

336 ) 

337 ``` 

338 """ 

339 ), 

340 ] = None, 

341 dependencies: Annotated[ 

342 Optional[Sequence[Depends]], 

343 Doc( 

344 """ 

345 A list of global dependencies, they will be applied to each 

346 *path operation*, including in sub-routers. 

347 

348 Read more about it in the 

349 [FastAPI docs for Global Dependencies](https://fastapi.tiangolo.com/tutorial/dependencies/global-dependencies/). 

350 

351 **Example** 

352 

353 ```python 

354 from fastapi import Depends, FastAPI 

355 

356 from .dependencies import func_dep_1, func_dep_2 

357 

358 app = FastAPI(dependencies=[Depends(func_dep_1), Depends(func_dep_2)]) 

359 ``` 

360 """ 

361 ), 

362 ] = None, 

363 default_response_class: Annotated[ 

364 Type[Response], 

365 Doc( 

366 """ 

367 The default response class to be used. 

368 

369 Read more in the 

370 [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#default-response-class). 

371 

372 **Example** 

373 

374 ```python 

375 from fastapi import FastAPI 

376 from fastapi.responses import ORJSONResponse 

377 

378 app = FastAPI(default_response_class=ORJSONResponse) 

379 ``` 

380 """ 

381 ), 

382 ] = Default(JSONResponse), 

383 redirect_slashes: Annotated[ 

384 bool, 

385 Doc( 

386 """ 

387 Whether to detect and redirect slashes in URLs when the client doesn't 

388 use the same format. 

389 

390 **Example** 

391 

392 ```python 

393 from fastapi import FastAPI 

394 

395 app = FastAPI(redirect_slashes=True) # the default 

396 

397 @app.get("/items/") 

398 async def read_items(): 

399 return [{"item_id": "Foo"}] 

400 ``` 

401 

402 With this app, if a client goes to `/items` (without a trailing slash), 

403 they will be automatically redirected with an HTTP status code of 307 

404 to `/items/`. 

405 """ 

406 ), 

407 ] = True, 

408 docs_url: Annotated[ 

409 Optional[str], 

410 Doc( 

411 """ 

412 The path to the automatic interactive API documentation. 

413 It is handled in the browser by Swagger UI. 

414 

415 The default URL is `/docs`. You can disable it by setting it to `None`. 

416 

417 If `openapi_url` is set to `None`, this will be automatically disabled. 

418 

419 Read more in the 

420 [FastAPI docs for Metadata and Docs URLs](https://fastapi.tiangolo.com/tutorial/metadata/#docs-urls). 

421 

422 **Example** 

423 

424 ```python 

425 from fastapi import FastAPI 

426 

427 app = FastAPI(docs_url="/documentation", redoc_url=None) 

428 ``` 

429 """ 

430 ), 

431 ] = "/docs", 

432 redoc_url: Annotated[ 

433 Optional[str], 

434 Doc( 

435 """ 

436 The path to the alternative automatic interactive API documentation 

437 provided by ReDoc. 

438 

439 The default URL is `/redoc`. You can disable it by setting it to `None`. 

440 

441 If `openapi_url` is set to `None`, this will be automatically disabled. 

442 

443 Read more in the 

444 [FastAPI docs for Metadata and Docs URLs](https://fastapi.tiangolo.com/tutorial/metadata/#docs-urls). 

445 

446 **Example** 

447 

448 ```python 

449 from fastapi import FastAPI 

450 

451 app = FastAPI(docs_url="/documentation", redoc_url="redocumentation") 

452 ``` 

453 """ 

454 ), 

455 ] = "/redoc", 

456 swagger_ui_oauth2_redirect_url: Annotated[ 

457 Optional[str], 

458 Doc( 

459 """ 

460 The OAuth2 redirect endpoint for the Swagger UI. 

461 

462 By default it is `/docs/oauth2-redirect`. 

463 

464 This is only used if you use OAuth2 (with the "Authorize" button) 

465 with Swagger UI. 

466 """ 

467 ), 

468 ] = "/docs/oauth2-redirect", 

469 swagger_ui_init_oauth: Annotated[ 

470 Optional[Dict[str, Any]], 

471 Doc( 

472 """ 

473 OAuth2 configuration for the Swagger UI, by default shown at `/docs`. 

474 

475 Read more about the available configuration options in the 

476 [Swagger UI docs](https://swagger.io/docs/open-source-tools/swagger-ui/usage/oauth2/). 

477 """ 

478 ), 

479 ] = None, 

480 middleware: Annotated[ 

481 Optional[Sequence[Middleware]], 

482 Doc( 

483 """ 

484 List of middleware to be added when creating the application. 

485 

486 In FastAPI you would normally do this with `app.add_middleware()` 

487 instead. 

488 

489 Read more in the 

490 [FastAPI docs for Middleware](https://fastapi.tiangolo.com/tutorial/middleware/). 

491 """ 

492 ), 

493 ] = None, 

494 exception_handlers: Annotated[ 

495 Optional[ 

496 Dict[ 

497 Union[int, Type[Exception]], 

498 Callable[[Request, Any], Coroutine[Any, Any, Response]], 

499 ] 

500 ], 

501 Doc( 

502 """ 

503 A dictionary with handlers for exceptions. 

504 

505 In FastAPI, you would normally use the decorator 

506 `@app.exception_handler()`. 

507 

508 Read more in the 

509 [FastAPI docs for Handling Errors](https://fastapi.tiangolo.com/tutorial/handling-errors/). 

510 """ 

511 ), 

512 ] = None, 

513 on_startup: Annotated[ 

514 Optional[Sequence[Callable[[], Any]]], 

515 Doc( 

516 """ 

517 A list of startup event handler functions. 

518 

519 You should instead use the `lifespan` handlers. 

520 

521 Read more in the [FastAPI docs for `lifespan`](https://fastapi.tiangolo.com/advanced/events/). 

522 """ 

523 ), 

524 ] = None, 

525 on_shutdown: Annotated[ 

526 Optional[Sequence[Callable[[], Any]]], 

527 Doc( 

528 """ 

529 A list of shutdown event handler functions. 

530 

531 You should instead use the `lifespan` handlers. 

532 

533 Read more in the 

534 [FastAPI docs for `lifespan`](https://fastapi.tiangolo.com/advanced/events/). 

535 """ 

536 ), 

537 ] = None, 

538 lifespan: Annotated[ 

539 Optional[Lifespan[AppType]], 

540 Doc( 

541 """ 

542 A `Lifespan` context manager handler. This replaces `startup` and 

543 `shutdown` functions with a single context manager. 

544 

545 Read more in the 

546 [FastAPI docs for `lifespan`](https://fastapi.tiangolo.com/advanced/events/). 

547 """ 

548 ), 

549 ] = None, 

550 terms_of_service: Annotated[ 

551 Optional[str], 

552 Doc( 

553 """ 

554 A URL to the Terms of Service for your API. 

555 

556 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

557 

558 Read more at the 

559 [FastAPI docs for Metadata and Docs URLs](https://fastapi.tiangolo.com/tutorial/metadata/#metadata-for-api). 

560 

561 **Example** 

562 

563 ```python 

564 app = FastAPI(terms_of_service="http://example.com/terms/") 

565 ``` 

566 """ 

567 ), 

568 ] = None, 

569 contact: Annotated[ 

570 Optional[Dict[str, Union[str, Any]]], 

571 Doc( 

572 """ 

573 A dictionary with the contact information for the exposed API. 

574 

575 It can contain several fields. 

576 

577 * `name`: (`str`) The name of the contact person/organization. 

578 * `url`: (`str`) A URL pointing to the contact information. MUST be in 

579 the format of a URL. 

580 * `email`: (`str`) The email address of the contact person/organization. 

581 MUST be in the format of an email address. 

582 

583 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

584 

585 Read more at the 

586 [FastAPI docs for Metadata and Docs URLs](https://fastapi.tiangolo.com/tutorial/metadata/#metadata-for-api). 

587 

588 **Example** 

589 

590 ```python 

591 app = FastAPI( 

592 contact={ 

593 "name": "Deadpoolio the Amazing", 

594 "url": "http://x-force.example.com/contact/", 

595 "email": "dp@x-force.example.com", 

596 } 

597 ) 

598 ``` 

599 """ 

600 ), 

601 ] = None, 

602 license_info: Annotated[ 

603 Optional[Dict[str, Union[str, Any]]], 

604 Doc( 

605 """ 

606 A dictionary with the license information for the exposed API. 

607 

608 It can contain several fields. 

609 

610 * `name`: (`str`) **REQUIRED** (if a `license_info` is set). The 

611 license name used for the API. 

612 * `identifier`: (`str`) An [SPDX](https://spdx.dev/) license expression 

613 for the API. The `identifier` field is mutually exclusive of the `url` 

614 field. Available since OpenAPI 3.1.0, FastAPI 0.99.0. 

615 * `url`: (`str`) A URL to the license used for the API. This MUST be 

616 the format of a URL. 

617 

618 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

619 

620 Read more at the 

621 [FastAPI docs for Metadata and Docs URLs](https://fastapi.tiangolo.com/tutorial/metadata/#metadata-for-api). 

622 

623 **Example** 

624 

625 ```python 

626 app = FastAPI( 

627 license_info={ 

628 "name": "Apache 2.0", 

629 "url": "https://www.apache.org/licenses/LICENSE-2.0.html", 

630 } 

631 ) 

632 ``` 

633 """ 

634 ), 

635 ] = None, 

636 openapi_prefix: Annotated[ 

637 str, 

638 Doc( 

639 """ 

640 A URL prefix for the OpenAPI URL. 

641 """ 

642 ), 

643 deprecated( 

644 """ 

645 "openapi_prefix" has been deprecated in favor of "root_path", which 

646 follows more closely the ASGI standard, is simpler, and more 

647 automatic. 

648 """ 

649 ), 

650 ] = "", 

651 root_path: Annotated[ 

652 str, 

653 Doc( 

654 """ 

655 A path prefix handled by a proxy that is not seen by the application 

656 but is seen by external clients, which affects things like Swagger UI. 

657 

658 Read more about it at the 

659 [FastAPI docs for Behind a Proxy](https://fastapi.tiangolo.com/advanced/behind-a-proxy/). 

660 

661 **Example** 

662 

663 ```python 

664 from fastapi import FastAPI 

665 

666 app = FastAPI(root_path="/api/v1") 

667 ``` 

668 """ 

669 ), 

670 ] = "", 

671 root_path_in_servers: Annotated[ 

672 bool, 

673 Doc( 

674 """ 

675 To disable automatically generating the URLs in the `servers` field 

676 in the autogenerated OpenAPI using the `root_path`. 

677 

678 Read more about it in the 

679 [FastAPI docs for Behind a Proxy](https://fastapi.tiangolo.com/advanced/behind-a-proxy/#disable-automatic-server-from-root_path). 

680 

681 **Example** 

682 

683 ```python 

684 from fastapi import FastAPI 

685 

686 app = FastAPI(root_path_in_servers=False) 

687 ``` 

688 """ 

689 ), 

690 ] = True, 

691 responses: Annotated[ 

692 Optional[Dict[Union[int, str], Dict[str, Any]]], 

693 Doc( 

694 """ 

695 Additional responses to be shown in OpenAPI. 

696 

697 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

698 

699 Read more about it in the 

700 [FastAPI docs for Additional Responses in OpenAPI](https://fastapi.tiangolo.com/advanced/additional-responses/). 

701 

702 And in the 

703 [FastAPI docs for Bigger Applications](https://fastapi.tiangolo.com/tutorial/bigger-applications/#include-an-apirouter-with-a-custom-prefix-tags-responses-and-dependencies). 

704 """ 

705 ), 

706 ] = None, 

707 callbacks: Annotated[ 

708 Optional[List[BaseRoute]], 

709 Doc( 

710 """ 

711 OpenAPI callbacks that should apply to all *path operations*. 

712 

713 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

714 

715 Read more about it in the 

716 [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/). 

717 """ 

718 ), 

719 ] = None, 

720 webhooks: Annotated[ 

721 Optional[routing.APIRouter], 

722 Doc( 

723 """ 

724 Add OpenAPI webhooks. This is similar to `callbacks` but it doesn't 

725 depend on specific *path operations*. 

726 

727 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

728 

729 **Note**: This is available since OpenAPI 3.1.0, FastAPI 0.99.0. 

730 

731 Read more about it in the 

732 [FastAPI docs for OpenAPI Webhooks](https://fastapi.tiangolo.com/advanced/openapi-webhooks/). 

733 """ 

734 ), 

735 ] = None, 

736 deprecated: Annotated[ 

737 Optional[bool], 

738 Doc( 

739 """ 

740 Mark all *path operations* as deprecated. You probably don't need it, 

741 but it's available. 

742 

743 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

744 

745 Read more about it in the 

746 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/). 

747 """ 

748 ), 

749 ] = None, 

750 include_in_schema: Annotated[ 

751 bool, 

752 Doc( 

753 """ 

754 To include (or not) all the *path operations* in the generated OpenAPI. 

755 You probably don't need it, but it's available. 

756 

757 This affects the generated OpenAPI (e.g. visible at `/docs`). 

758 

759 Read more about it in the 

760 [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi). 

761 """ 

762 ), 

763 ] = True, 

764 swagger_ui_parameters: Annotated[ 

765 Optional[Dict[str, Any]], 

766 Doc( 

767 """ 

768 Parameters to configure Swagger UI, the autogenerated interactive API 

769 documentation (by default at `/docs`). 

770 

771 Read more about it in the 

772 [FastAPI docs about how to Configure Swagger UI](https://fastapi.tiangolo.com/how-to/configure-swagger-ui/). 

773 """ 

774 ), 

775 ] = None, 

776 generate_unique_id_function: Annotated[ 

777 Callable[[routing.APIRoute], str], 

778 Doc( 

779 """ 

780 Customize the function used to generate unique IDs for the *path 

781 operations* shown in the generated OpenAPI. 

782 

783 This is particularly useful when automatically generating clients or 

784 SDKs for your API. 

785 

786 Read more about it in the 

787 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function). 

788 """ 

789 ), 

790 ] = Default(generate_unique_id), 

791 separate_input_output_schemas: Annotated[ 

792 bool, 

793 Doc( 

794 """ 

795 Whether to generate separate OpenAPI schemas for request body and 

796 response body when the results would be more precise. 

797 

798 This is particularly useful when automatically generating clients. 

799 

800 For example, if you have a model like: 

801 

802 ```python 

803 from pydantic import BaseModel 

804 

805 class Item(BaseModel): 

806 name: str 

807 tags: list[str] = [] 

808 ``` 

809 

810 When `Item` is used for input, a request body, `tags` is not required, 

811 the client doesn't have to provide it. 

812 

813 But when using `Item` for output, for a response body, `tags` is always 

814 available because it has a default value, even if it's just an empty 

815 list. So, the client should be able to always expect it. 

816 

817 In this case, there would be two different schemas, one for input and 

818 another one for output. 

819 """ 

820 ), 

821 ] = True, 

822 openapi_external_docs: Annotated[ 

823 Optional[Dict[str, Any]], 

824 Doc( 

825 """ 

826 This field allows you to provide additional external documentation links. 

827 If provided, it must be a dictionary containing: 

828 

829 * `description`: A brief description of the external documentation. 

830 * `url`: The URL pointing to the external documentation. The value **MUST** 

831 be a valid URL format. 

832 

833 **Example**: 

834 

835 ```python 

836 from fastapi import FastAPI 

837 

838 external_docs = { 

839 "description": "Detailed API Reference", 

840 "url": "https://example.com/api-docs", 

841 } 

842 

843 app = FastAPI(openapi_external_docs=external_docs) 

844 ``` 

845 """ 

846 ), 

847 ] = None, 

848 **extra: Annotated[ 

849 Any, 

850 Doc( 

851 """ 

852 Extra keyword arguments to be stored in the app, not used by FastAPI 

853 anywhere. 

854 """ 

855 ), 

856 ], 

857 ) -> None: 

858 self.debug = debug 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe

859 self.title = title 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe

860 self.summary = summary 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe

861 self.description = description 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe

862 self.version = version 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe

863 self.terms_of_service = terms_of_service 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe

864 self.contact = contact 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe

865 self.license_info = license_info 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe

866 self.openapi_url = openapi_url 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe

867 self.openapi_tags = openapi_tags 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe

868 self.root_path_in_servers = root_path_in_servers 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe

869 self.docs_url = docs_url 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe

870 self.redoc_url = redoc_url 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe

871 self.swagger_ui_oauth2_redirect_url = swagger_ui_oauth2_redirect_url 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe

872 self.swagger_ui_init_oauth = swagger_ui_init_oauth 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe

873 self.swagger_ui_parameters = swagger_ui_parameters 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe

874 self.servers = servers or [] 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe

875 self.separate_input_output_schemas = separate_input_output_schemas 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe

876 self.openapi_external_docs = openapi_external_docs 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe

877 self.extra = extra 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe

878 self.openapi_version: Annotated[ 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe

879 str, 

880 Doc( 

881 """ 

882 The version string of OpenAPI. 

883 

884 FastAPI will generate OpenAPI version 3.1.0, and will output that as 

885 the OpenAPI version. But some tools, even though they might be 

886 compatible with OpenAPI 3.1.0, might not recognize it as a valid. 

887 

888 So you could override this value to trick those tools into using 

889 the generated OpenAPI. Have in mind that this is a hack. But if you 

890 avoid using features added in OpenAPI 3.1.0, it might work for your 

891 use case. 

892 

893 This is not passed as a parameter to the `FastAPI` class to avoid 

894 giving the false idea that FastAPI would generate a different OpenAPI 

895 schema. It is only available as an attribute. 

896 

897 **Example** 

898 

899 ```python 

900 from fastapi import FastAPI 

901 

902 app = FastAPI() 

903 

904 app.openapi_version = "3.0.2" 

905 ``` 

906 """ 

907 ), 

908 ] = "3.1.0" 

909 self.openapi_schema: Optional[Dict[str, Any]] = None 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe

910 if self.openapi_url: 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe

911 assert self.title, "A title must be provided for OpenAPI, e.g.: 'My API'" 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h gc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i Gc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj %cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk kd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl SdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm ?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten ue#g$gve/bwesbxeyezeAe

912 assert self.version, "A version must be provided for OpenAPI, e.g.: '2.1.0'" 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h gc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i Gc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj %cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk kd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl SdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm ?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten ue#g$gve/bwesbxeyezeAe

913 # TODO: remove when discarding the openapi_prefix parameter 

914 if openapi_prefix: 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe

915 logger.warning( 1abcdefg

916 '"openapi_prefix" has been deprecated in favor of "root_path", which ' 

917 "follows more closely the ASGI standard, is simpler, and more " 

918 "automatic. Check the docs at " 

919 "https://fastapi.tiangolo.com/advanced/sub-applications/" 

920 ) 

921 self.webhooks: Annotated[ 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe

922 routing.APIRouter, 

923 Doc( 

924 """ 

925 The `app.webhooks` attribute is an `APIRouter` with the *path 

926 operations* that will be used just for documentation of webhooks. 

927 

928 Read more about it in the 

929 [FastAPI docs for OpenAPI Webhooks](https://fastapi.tiangolo.com/advanced/openapi-webhooks/). 

930 """ 

931 ), 

932 ] = webhooks or routing.APIRouter() 

933 self.root_path = root_path or openapi_prefix 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe

934 self.state: Annotated[ 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe

935 State, 

936 Doc( 

937 """ 

938 A state object for the application. This is the same object for the 

939 entire application, it doesn't change from request to request. 

940 

941 You normally wouldn't use this in FastAPI, for most of the cases you 

942 would instead use FastAPI dependencies. 

943 

944 This is simply inherited from Starlette. 

945 

946 Read more about it in the 

947 [Starlette docs for Applications](https://www.starlette.dev/applications/#storing-state-on-the-app-instance). 

948 """ 

949 ), 

950 ] = State() 

951 self.dependency_overrides: Annotated[ 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe

952 Dict[Callable[..., Any], Callable[..., Any]], 

953 Doc( 

954 """ 

955 A dictionary with overrides for the dependencies. 

956 

957 Each key is the original dependency callable, and the value is the 

958 actual dependency that should be called. 

959 

960 This is for testing, to replace expensive dependencies with testing 

961 versions. 

962 

963 Read more about it in the 

964 [FastAPI docs for Testing Dependencies with Overrides](https://fastapi.tiangolo.com/advanced/testing-dependencies/). 

965 """ 

966 ), 

967 ] = {} 

968 self.router: routing.APIRouter = routing.APIRouter( 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe

969 routes=routes, 

970 redirect_slashes=redirect_slashes, 

971 dependency_overrides_provider=self, 

972 on_startup=on_startup, 

973 on_shutdown=on_shutdown, 

974 lifespan=lifespan, 

975 default_response_class=default_response_class, 

976 dependencies=dependencies, 

977 callbacks=callbacks, 

978 deprecated=deprecated, 

979 include_in_schema=include_in_schema, 

980 responses=responses, 

981 generate_unique_id_function=generate_unique_id_function, 

982 ) 

983 self.exception_handlers: Dict[ 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe

984 Any, Callable[[Request, Any], Union[Response, Awaitable[Response]]] 

985 ] = {} if exception_handlers is None else dict(exception_handlers) 

986 self.exception_handlers.setdefault(HTTPException, http_exception_handler) 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe

987 self.exception_handlers.setdefault( 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe

988 RequestValidationError, request_validation_exception_handler 

989 ) 

990 self.exception_handlers.setdefault( 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe

991 WebSocketRequestValidationError, 

992 # Starlette still has incorrect type specification for the handlers 

993 websocket_request_validation_exception_handler, # type: ignore 

994 ) 

995 

996 self.user_middleware: List[Middleware] = ( 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe

997 [] if middleware is None else list(middleware) 

998 ) 

999 self.middleware_stack: Union[ASGIApp, None] = None 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe

1000 self.setup() 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe

1001 

1002 def build_middleware_stack(self) -> ASGIApp: 1abcdefg

1003 # Duplicate/override from Starlette to add AsyncExitStackMiddleware 

1004 # inside of ExceptionMiddleware, inside of custom user middlewares 

1005 debug = self.debug 2a ujvjwjxjyjzjAjBjsi-g.g/g:gCjDj(iEj:b;bFjGj=b?bHjIj;gJjKj=gti@b[b]bLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j^b_b1j2j)i3j4j?g*i5j6j7j8j@g9j!j#j$j%jo = p q r s t ? 'j[g(j)j*j+j,j`b{b-j.j/j:j8i;j]g=j?jAbBbCbu v Db@j[j]j^j_j^g`j{j|j}j~jakbk|b}bck_gdkek`gfkgkhkik{gjkkklkmknkokpk~bqkacbccctbEbdcrkecfcFbw sk|gtkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7kui8k9k!k#k$k%k'k(k)k*k+k,k-k.k/k+i,i-i:k;k=k?k@k[k]kh 3egcviwixi^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvm}g%ghcwmGbxmymzmAmBmCm@ DmEmFmGmHm~gicImJmjckclcb KmLmMmNmOmPmQmRmyiahbhchdhSmTm.iUmmcncVmWmocpcXmYmehZm0mfhziqcrcsc1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)mtcuc*m+m/i,m-mgh:i.m/m:m;mhh=m?m@m[m]mx [ y z A B C ] ^mih_m`m{m|m}mvcwc~manbncn9idnjhenfnHbIbJbD E KbgnhninjnknkhlnmnnnonpnqnrnxcycsnlhtnunmhvnwnxnynnhznAnBnCnDnEnFnzcGnAcBcCcubLbDcHnEcFcMbF InohJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:nAi;n=n?n@n[n]n^n_n`n{n|n}n~naobo;i=i?icodoeofogohoioi |eGcBiCiDijokolomonooopoqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpph'gHcMpNbNpOpPpQpRpSpTp^ UpVpWpXpYpqhIcZp0pJcKcLcc 1p2p3p4p5p6p7p8pEirhshthuh9p!p@i#pMcNc$p%pOcPc'p(pvh)p*pwhFiQcRcSc+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{pTcUc|p}p[i~paqxh]ibqcqdqeqyhfqgqhqiqjqG _ H I J K L ` kqzhlqmqnqoqpqVcWcqqrqsqtq!iuqAhvqwqObPbQbM N RbxqyqzqAqBqBhCqDqEqFqGqHqIqXcYcZc{ 0c1c| 2c3c4cJqChKqLqDhMqNqOqPqEhQqRqSqTqUqVqWq5cXq6c7c8cvbSb9cYq!c#cZqFhTbO 0qGh1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdr$cerGifrgrhrirjrkrlrmrnrorprqrrrsrtr^i_i`iurvrwrxryrzrArj Cf%cHiIiJiBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3sHh(g'c4sUb5s6s7s8s9s!s(c#s} $s%s's(s)sIh)c*s+s*c+c,cd ,s-s.s/s:s;s=s?sKiJhKhLhMh@s[s{i]s-c.c^s_s/c:c`s{sNh|s}sOhLi;c=c?c~satbtctdtetftgthtitjtktltmtntot@c[cptqt|irtstPh}ittutvtwtQhxtytztAtBtP ~ Q R S T U abCtRhDtEtFtGtHt]c^cItJtKtLt#iMtShNtOtVbWbXbV W YbPtQtRtStTtThUtVtWtXtYtZt0t_c`c{cbb|c}ccb~cadbd1tUh2t3tVh4t5t6t7tWh8t9t!t#t$t%t'tcd(tddedfdwbZbgd)thdid*tXh0bX +tYh,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvujdwuMixuyuzuAuBuCuDuEuFuGuHuIuJuKuLu~iajbjMuNuOuPuQuRuSuk 7fkdNiOiPiTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.vZh)gld/v1b:v;v=v?v@v[vmd]vdb^v_v`v{v|v0hnd}v~vodpdqde awbwcwdwewfwgwhwQi1h2h3h4hiwjwcjkwrdsdlwmwtdudnwow5hpwqw6hRivdwdxdrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwydzdHwIwdjJwKw7hejLwMwNwOw8hPwQwRwSwTwY ebZ 0 1 2 3 fbUw9hVwWwXwYwZwAdBd0w1w2w3w$i4w!h5w6w2b3b4b4 5 5b7w8w9w!w#w#h$w%w'w(w)w*w+wCdDdEdgbFdGdhbHdIdJd,w$h-w.w%h/w:w;w=w'h?w@w[w]w^w_w`wKd{wLdMdNdxb6bOd|wPdQd}w(h7b6 ~w)haxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxRdOxSiPxQxRxSxTxUxVxWxXxYxZx0x1x2x3xfjgjhj4x5x6x7x8x9x!xl bgSdTiUiVi#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzcz*h*gTddz8bezfzgzhzizjzUdkziblzmznzozpz+hVdqzrzWdXdYdf sztzuzvzwzxzyzzzWi,h-h.h/hAzBzijCzZd0dDzEz1d2dFzGz:hHzIz;hXi3d4d5dJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYz6d7dZz0zjj1z2z=hkj3z4z5z6z?h7z8z9z!z#z7 jb8 9 ! # $ kb$z@h%z'z(z)z*z8d9d+z,z-z.z%i/z[h:z;z9b!b#b% ' $b=z?z@z[z]z]h^z_z`z{z|z}z~z!d#d$dlb%d'dmb(d)d*daA^hbAcA_hdAeAfAgA`hhAiAjAkAlAmAnA+doA,d-d.dyb%b/dpA:d;dqA{h'b( rA|hsAtAuAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A=d6AYi7A8A9A!A#A$A%A'A(A)A*A+A,A-A.Aljmjnj/A:A;A=A?A@A[Am Gg?dZi0i1i]A^A_A`A{A|A}A~AaBbBcBdBeBfBgBhBiBjBkBlBmBnBoBpBqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuC}h+g@dvC(bwCxCyCzCACBC[dCCnbDCECFCGCHC~h]dICJC^d_d`dg KCLCMCNCOCPCQCRC2iaibicidiSCTCojUC{d|dVCWC}d~dXCeiYCZCfi3iaebe0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(Ccede)C*Cpj+C,Cgiqj-C.C/Chi:C;C=C?C@C) ob* + , - . pb[Cii]C^C_C`C{Cee|C}C~CaD'ibDjicDdD)b*b+b/ : ,beDfDgDhDiDkijDkDfegeqbheierbjekelelDlimDnDmioDpDqDrDnisDtDuDvDwDxDyDmezDneoepezb-bqeADreseBDoi.b; CDpiDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)Dte*D4i+D,D-D.D/D:D;D=D?D@D[D]D^D_D`Drjsjtj{D|D}D~DaEbEcEn !gue5i6i7idEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFqi,gveAF/bBFCFDFEFFFGFweHFsbIFJFKFLFMFrixeNFOFyezeAe

1006 error_handler = None 2a ujvjwjxjyjzjAjBjsi-g.g/g:gCjDj(iEj:b;bFjGj=b?bHjIj;gJjKj=gti@b[b]bLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j^b_b1j2j)i3j4j?g*i5j6j7j8j@g9j!j#j$j%jo = p q r s t ? 'j[g(j)j*j+j,j`b{b-j.j/j:j8i;j]g=j?jAbBbCbu v Db@j[j]j^j_j^g`j{j|j}j~jakbk|b}bck_gdkek`gfkgkhkik{gjkkklkmknkokpk~bqkacbccctbEbdcrkecfcFbw sk|gtkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7kui8k9k!k#k$k%k'k(k)k*k+k,k-k.k/k+i,i-i:k;k=k?k@k[k]kh 3egcviwixi^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvm}g%ghcwmGbxmymzmAmBmCm@ DmEmFmGmHm~gicImJmjckclcb KmLmMmNmOmPmQmRmyiahbhchdhSmTm.iUmmcncVmWmocpcXmYmehZm0mfhziqcrcsc1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)mtcuc*m+m/i,m-mgh:i.m/m:m;mhh=m?m@m[m]mx [ y z A B C ] ^mih_m`m{m|m}mvcwc~manbncn9idnjhenfnHbIbJbD E KbgnhninjnknkhlnmnnnonpnqnrnxcycsnlhtnunmhvnwnxnynnhznAnBnCnDnEnFnzcGnAcBcCcubLbDcHnEcFcMbF InohJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:nAi;n=n?n@n[n]n^n_n`n{n|n}n~naobo;i=i?icodoeofogohoioi |eGcBiCiDijokolomonooopoqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpph'gHcMpNbNpOpPpQpRpSpTp^ UpVpWpXpYpqhIcZp0pJcKcLcc 1p2p3p4p5p6p7p8pEirhshthuh9p!p@i#pMcNc$p%pOcPc'p(pvh)p*pwhFiQcRcSc+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{pTcUc|p}p[i~paqxh]ibqcqdqeqyhfqgqhqiqjqG _ H I J K L ` kqzhlqmqnqoqpqVcWcqqrqsqtq!iuqAhvqwqObPbQbM N RbxqyqzqAqBqBhCqDqEqFqGqHqIqXcYcZc{ 0c1c| 2c3c4cJqChKqLqDhMqNqOqPqEhQqRqSqTqUqVqWq5cXq6c7c8cvbSb9cYq!c#cZqFhTbO 0qGh1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdr$cerGifrgrhrirjrkrlrmrnrorprqrrrsrtr^i_i`iurvrwrxryrzrArj Cf%cHiIiJiBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3sHh(g'c4sUb5s6s7s8s9s!s(c#s} $s%s's(s)sIh)c*s+s*c+c,cd ,s-s.s/s:s;s=s?sKiJhKhLhMh@s[s{i]s-c.c^s_s/c:c`s{sNh|s}sOhLi;c=c?c~satbtctdtetftgthtitjtktltmtntot@c[cptqt|irtstPh}ittutvtwtQhxtytztAtBtP ~ Q R S T U abCtRhDtEtFtGtHt]c^cItJtKtLt#iMtShNtOtVbWbXbV W YbPtQtRtStTtThUtVtWtXtYtZt0t_c`c{cbb|c}ccb~cadbd1tUh2t3tVh4t5t6t7tWh8t9t!t#t$t%t'tcd(tddedfdwbZbgd)thdid*tXh0bX +tYh,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvujdwuMixuyuzuAuBuCuDuEuFuGuHuIuJuKuLu~iajbjMuNuOuPuQuRuSuk 7fkdNiOiPiTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.vZh)gld/v1b:v;v=v?v@v[vmd]vdb^v_v`v{v|v0hnd}v~vodpdqde awbwcwdwewfwgwhwQi1h2h3h4hiwjwcjkwrdsdlwmwtdudnwow5hpwqw6hRivdwdxdrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwydzdHwIwdjJwKw7hejLwMwNwOw8hPwQwRwSwTwY ebZ 0 1 2 3 fbUw9hVwWwXwYwZwAdBd0w1w2w3w$i4w!h5w6w2b3b4b4 5 5b7w8w9w!w#w#h$w%w'w(w)w*w+wCdDdEdgbFdGdhbHdIdJd,w$h-w.w%h/w:w;w=w'h?w@w[w]w^w_w`wKd{wLdMdNdxb6bOd|wPdQd}w(h7b6 ~w)haxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxRdOxSiPxQxRxSxTxUxVxWxXxYxZx0x1x2x3xfjgjhj4x5x6x7x8x9x!xl bgSdTiUiVi#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzcz*h*gTddz8bezfzgzhzizjzUdkziblzmznzozpz+hVdqzrzWdXdYdf sztzuzvzwzxzyzzzWi,h-h.h/hAzBzijCzZd0dDzEz1d2dFzGz:hHzIz;hXi3d4d5dJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYz6d7dZz0zjj1z2z=hkj3z4z5z6z?h7z8z9z!z#z7 jb8 9 ! # $ kb$z@h%z'z(z)z*z8d9d+z,z-z.z%i/z[h:z;z9b!b#b% ' $b=z?z@z[z]z]h^z_z`z{z|z}z~z!d#d$dlb%d'dmb(d)d*daA^hbAcA_hdAeAfAgA`hhAiAjAkAlAmAnA+doA,d-d.dyb%b/dpA:d;dqA{h'b( rA|hsAtAuAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A=d6AYi7A8A9A!A#A$A%A'A(A)A*A+A,A-A.Aljmjnj/A:A;A=A?A@A[Am Gg?dZi0i1i]A^A_A`A{A|A}A~AaBbBcBdBeBfBgBhBiBjBkBlBmBnBoBpBqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuC}h+g@dvC(bwCxCyCzCACBC[dCCnbDCECFCGCHC~h]dICJC^d_d`dg KCLCMCNCOCPCQCRC2iaibicidiSCTCojUC{d|dVCWC}d~dXCeiYCZCfi3iaebe0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(Ccede)C*Cpj+C,Cgiqj-C.C/Chi:C;C=C?C@C) ob* + , - . pb[Cii]C^C_C`C{Cee|C}C~CaD'ibDjicDdD)b*b+b/ : ,beDfDgDhDiDkijDkDfegeqbheierbjekelelDlimDnDmioDpDqDrDnisDtDuDvDwDxDyDmezDneoepezb-bqeADreseBDoi.b; CDpiDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)Dte*D4i+D,D-D.D/D:D;D=D?D@D[D]D^D_D`Drjsjtj{D|D}D~DaEbEcEn !gue5i6i7idEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFqi,gveAF/bBFCFDFEFFFGFweHFsbIFJFKFLFMFrixeNFOFyezeAe

1007 exception_handlers: dict[Any, ExceptionHandler] = {} 2a ujvjwjxjyjzjAjBjsi-g.g/g:gCjDj(iEj:b;bFjGj=b?bHjIj;gJjKj=gti@b[b]bLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j^b_b1j2j)i3j4j?g*i5j6j7j8j@g9j!j#j$j%jo = p q r s t ? 'j[g(j)j*j+j,j`b{b-j.j/j:j8i;j]g=j?jAbBbCbu v Db@j[j]j^j_j^g`j{j|j}j~jakbk|b}bck_gdkek`gfkgkhkik{gjkkklkmknkokpk~bqkacbccctbEbdcrkecfcFbw sk|gtkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7kui8k9k!k#k$k%k'k(k)k*k+k,k-k.k/k+i,i-i:k;k=k?k@k[k]kh 3egcviwixi^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvm}g%ghcwmGbxmymzmAmBmCm@ DmEmFmGmHm~gicImJmjckclcb KmLmMmNmOmPmQmRmyiahbhchdhSmTm.iUmmcncVmWmocpcXmYmehZm0mfhziqcrcsc1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)mtcuc*m+m/i,m-mgh:i.m/m:m;mhh=m?m@m[m]mx [ y z A B C ] ^mih_m`m{m|m}mvcwc~manbncn9idnjhenfnHbIbJbD E KbgnhninjnknkhlnmnnnonpnqnrnxcycsnlhtnunmhvnwnxnynnhznAnBnCnDnEnFnzcGnAcBcCcubLbDcHnEcFcMbF InohJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:nAi;n=n?n@n[n]n^n_n`n{n|n}n~naobo;i=i?icodoeofogohoioi |eGcBiCiDijokolomonooopoqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpph'gHcMpNbNpOpPpQpRpSpTp^ UpVpWpXpYpqhIcZp0pJcKcLcc 1p2p3p4p5p6p7p8pEirhshthuh9p!p@i#pMcNc$p%pOcPc'p(pvh)p*pwhFiQcRcSc+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{pTcUc|p}p[i~paqxh]ibqcqdqeqyhfqgqhqiqjqG _ H I J K L ` kqzhlqmqnqoqpqVcWcqqrqsqtq!iuqAhvqwqObPbQbM N RbxqyqzqAqBqBhCqDqEqFqGqHqIqXcYcZc{ 0c1c| 2c3c4cJqChKqLqDhMqNqOqPqEhQqRqSqTqUqVqWq5cXq6c7c8cvbSb9cYq!c#cZqFhTbO 0qGh1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdr$cerGifrgrhrirjrkrlrmrnrorprqrrrsrtr^i_i`iurvrwrxryrzrArj Cf%cHiIiJiBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3sHh(g'c4sUb5s6s7s8s9s!s(c#s} $s%s's(s)sIh)c*s+s*c+c,cd ,s-s.s/s:s;s=s?sKiJhKhLhMh@s[s{i]s-c.c^s_s/c:c`s{sNh|s}sOhLi;c=c?c~satbtctdtetftgthtitjtktltmtntot@c[cptqt|irtstPh}ittutvtwtQhxtytztAtBtP ~ Q R S T U abCtRhDtEtFtGtHt]c^cItJtKtLt#iMtShNtOtVbWbXbV W YbPtQtRtStTtThUtVtWtXtYtZt0t_c`c{cbb|c}ccb~cadbd1tUh2t3tVh4t5t6t7tWh8t9t!t#t$t%t'tcd(tddedfdwbZbgd)thdid*tXh0bX +tYh,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvujdwuMixuyuzuAuBuCuDuEuFuGuHuIuJuKuLu~iajbjMuNuOuPuQuRuSuk 7fkdNiOiPiTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.vZh)gld/v1b:v;v=v?v@v[vmd]vdb^v_v`v{v|v0hnd}v~vodpdqde awbwcwdwewfwgwhwQi1h2h3h4hiwjwcjkwrdsdlwmwtdudnwow5hpwqw6hRivdwdxdrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwydzdHwIwdjJwKw7hejLwMwNwOw8hPwQwRwSwTwY ebZ 0 1 2 3 fbUw9hVwWwXwYwZwAdBd0w1w2w3w$i4w!h5w6w2b3b4b4 5 5b7w8w9w!w#w#h$w%w'w(w)w*w+wCdDdEdgbFdGdhbHdIdJd,w$h-w.w%h/w:w;w=w'h?w@w[w]w^w_w`wKd{wLdMdNdxb6bOd|wPdQd}w(h7b6 ~w)haxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxRdOxSiPxQxRxSxTxUxVxWxXxYxZx0x1x2x3xfjgjhj4x5x6x7x8x9x!xl bgSdTiUiVi#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzcz*h*gTddz8bezfzgzhzizjzUdkziblzmznzozpz+hVdqzrzWdXdYdf sztzuzvzwzxzyzzzWi,h-h.h/hAzBzijCzZd0dDzEz1d2dFzGz:hHzIz;hXi3d4d5dJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYz6d7dZz0zjj1z2z=hkj3z4z5z6z?h7z8z9z!z#z7 jb8 9 ! # $ kb$z@h%z'z(z)z*z8d9d+z,z-z.z%i/z[h:z;z9b!b#b% ' $b=z?z@z[z]z]h^z_z`z{z|z}z~z!d#d$dlb%d'dmb(d)d*daA^hbAcA_hdAeAfAgA`hhAiAjAkAlAmAnA+doA,d-d.dyb%b/dpA:d;dqA{h'b( rA|hsAtAuAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A=d6AYi7A8A9A!A#A$A%A'A(A)A*A+A,A-A.Aljmjnj/A:A;A=A?A@A[Am Gg?dZi0i1i]A^A_A`A{A|A}A~AaBbBcBdBeBfBgBhBiBjBkBlBmBnBoBpBqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuC}h+g@dvC(bwCxCyCzCACBC[dCCnbDCECFCGCHC~h]dICJC^d_d`dg KCLCMCNCOCPCQCRC2iaibicidiSCTCojUC{d|dVCWC}d~dXCeiYCZCfi3iaebe0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(Ccede)C*Cpj+C,Cgiqj-C.C/Chi:C;C=C?C@C) ob* + , - . pb[Cii]C^C_C`C{Cee|C}C~CaD'ibDjicDdD)b*b+b/ : ,beDfDgDhDiDkijDkDfegeqbheierbjekelelDlimDnDmioDpDqDrDnisDtDuDvDwDxDyDmezDneoepezb-bqeADreseBDoi.b; CDpiDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)Dte*D4i+D,D-D.D/D:D;D=D?D@D[D]D^D_D`Drjsjtj{D|D}D~DaEbEcEn !gue5i6i7idEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFqi,gveAF/bBFCFDFEFFFGFweHFsbIFJFKFLFMFrixeNFOFyezeAe

1008 

1009 for key, value in self.exception_handlers.items(): 2a ujvjwjxjyjzjAjBjsi-g.g/g:gCjDj(iEj:b;bFjGj=b?bHjIj;gJjKj=gti@b[b]bLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j^b_b1j2j)i3j4j?g*i5j6j7j8j@g9j!j#j$j%jo = p q r s t ? 'j[g(j)j*j+j,j`b{b-j.j/j:j8i;j]g=j?jAbBbCbu v Db@j[j]j^j_j^g`j{j|j}j~jakbk|b}bck_gdkek`gfkgkhkik{gjkkklkmknkokpk~bqkacbccctbEbdcrkecfcFbw sk|gtkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7kui8k9k!k#k$k%k'k(k)k*k+k,k-k.k/k+i,i-i:k;k=k?k@k[k]kh 3egcviwixi^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvm}g%ghcwmGbxmymzmAmBmCm@ DmEmFmGmHm~gicImJmjckclcb KmLmMmNmOmPmQmRmyiahbhchdhSmTm.iUmmcncVmWmocpcXmYmehZm0mfhziqcrcsc1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)mtcuc*m+m/i,m-mgh:i.m/m:m;mhh=m?m@m[m]mx [ y z A B C ] ^mih_m`m{m|m}mvcwc~manbncn9idnjhenfnHbIbJbD E KbgnhninjnknkhlnmnnnonpnqnrnxcycsnlhtnunmhvnwnxnynnhznAnBnCnDnEnFnzcGnAcBcCcubLbDcHnEcFcMbF InohJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:nAi;n=n?n@n[n]n^n_n`n{n|n}n~naobo;i=i?icodoeofogohoioi |eGcBiCiDijokolomonooopoqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpph'gHcMpNbNpOpPpQpRpSpTp^ UpVpWpXpYpqhIcZp0pJcKcLcc 1p2p3p4p5p6p7p8pEirhshthuh9p!p@i#pMcNc$p%pOcPc'p(pvh)p*pwhFiQcRcSc+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{pTcUc|p}p[i~paqxh]ibqcqdqeqyhfqgqhqiqjqG _ H I J K L ` kqzhlqmqnqoqpqVcWcqqrqsqtq!iuqAhvqwqObPbQbM N RbxqyqzqAqBqBhCqDqEqFqGqHqIqXcYcZc{ 0c1c| 2c3c4cJqChKqLqDhMqNqOqPqEhQqRqSqTqUqVqWq5cXq6c7c8cvbSb9cYq!c#cZqFhTbO 0qGh1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdr$cerGifrgrhrirjrkrlrmrnrorprqrrrsrtr^i_i`iurvrwrxryrzrArj Cf%cHiIiJiBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3sHh(g'c4sUb5s6s7s8s9s!s(c#s} $s%s's(s)sIh)c*s+s*c+c,cd ,s-s.s/s:s;s=s?sKiJhKhLhMh@s[s{i]s-c.c^s_s/c:c`s{sNh|s}sOhLi;c=c?c~satbtctdtetftgthtitjtktltmtntot@c[cptqt|irtstPh}ittutvtwtQhxtytztAtBtP ~ Q R S T U abCtRhDtEtFtGtHt]c^cItJtKtLt#iMtShNtOtVbWbXbV W YbPtQtRtStTtThUtVtWtXtYtZt0t_c`c{cbb|c}ccb~cadbd1tUh2t3tVh4t5t6t7tWh8t9t!t#t$t%t'tcd(tddedfdwbZbgd)thdid*tXh0bX +tYh,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvujdwuMixuyuzuAuBuCuDuEuFuGuHuIuJuKuLu~iajbjMuNuOuPuQuRuSuk 7fkdNiOiPiTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.vZh)gld/v1b:v;v=v?v@v[vmd]vdb^v_v`v{v|v0hnd}v~vodpdqde awbwcwdwewfwgwhwQi1h2h3h4hiwjwcjkwrdsdlwmwtdudnwow5hpwqw6hRivdwdxdrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwydzdHwIwdjJwKw7hejLwMwNwOw8hPwQwRwSwTwY ebZ 0 1 2 3 fbUw9hVwWwXwYwZwAdBd0w1w2w3w$i4w!h5w6w2b3b4b4 5 5b7w8w9w!w#w#h$w%w'w(w)w*w+wCdDdEdgbFdGdhbHdIdJd,w$h-w.w%h/w:w;w=w'h?w@w[w]w^w_w`wKd{wLdMdNdxb6bOd|wPdQd}w(h7b6 ~w)haxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxRdOxSiPxQxRxSxTxUxVxWxXxYxZx0x1x2x3xfjgjhj4x5x6x7x8x9x!xl bgSdTiUiVi#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzcz*h*gTddz8bezfzgzhzizjzUdkziblzmznzozpz+hVdqzrzWdXdYdf sztzuzvzwzxzyzzzWi,h-h.h/hAzBzijCzZd0dDzEz1d2dFzGz:hHzIz;hXi3d4d5dJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYz6d7dZz0zjj1z2z=hkj3z4z5z6z?h7z8z9z!z#z7 jb8 9 ! # $ kb$z@h%z'z(z)z*z8d9d+z,z-z.z%i/z[h:z;z9b!b#b% ' $b=z?z@z[z]z]h^z_z`z{z|z}z~z!d#d$dlb%d'dmb(d)d*daA^hbAcA_hdAeAfAgA`hhAiAjAkAlAmAnA+doA,d-d.dyb%b/dpA:d;dqA{h'b( rA|hsAtAuAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A=d6AYi7A8A9A!A#A$A%A'A(A)A*A+A,A-A.Aljmjnj/A:A;A=A?A@A[Am Gg?dZi0i1i]A^A_A`A{A|A}A~AaBbBcBdBeBfBgBhBiBjBkBlBmBnBoBpBqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuC}h+g@dvC(bwCxCyCzCACBC[dCCnbDCECFCGCHC~h]dICJC^d_d`dg KCLCMCNCOCPCQCRC2iaibicidiSCTCojUC{d|dVCWC}d~dXCeiYCZCfi3iaebe0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(Ccede)C*Cpj+C,Cgiqj-C.C/Chi:C;C=C?C@C) ob* + , - . pb[Cii]C^C_C`C{Cee|C}C~CaD'ibDjicDdD)b*b+b/ : ,beDfDgDhDiDkijDkDfegeqbheierbjekelelDlimDnDmioDpDqDrDnisDtDuDvDwDxDyDmezDneoepezb-bqeADreseBDoi.b; CDpiDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)Dte*D4i+D,D-D.D/D:D;D=D?D@D[D]D^D_D`Drjsjtj{D|D}D~DaEbEcEn !gue5i6i7idEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFqi,gveAF/bBFCFDFEFFFGFweHFsbIFJFKFLFMFrixeNFOFyezeAe

1010 if key in (500, Exception): 2a ujvjwjxjyjzjAjBjsi-g.g/g:gCjDj(iEj:b;bFjGj=b?bHjIj;gJjKj=gti@b[b]bLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j^b_b1j2j)i3j4j?g*i5j6j7j8j@g9j!j#j$j%jo = p q r s t ? 'j[g(j)j*j+j,j`b{b-j.j/j:j8i;j]g=j?jAbBbCbu v Db@j[j]j^j_j^g`j{j|j}j~jakbk|b}bck_gdkek`gfkgkhkik{gjkkklkmknkokpk~bqkacbccctbEbdcrkecfcFbw sk|gtkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7kui8k9k!k#k$k%k'k(k)k*k+k,k-k.k/k+i,i-i:k;k=k?k@k[k]kh 3egcviwixi^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvm}g%ghcwmGbxmymzmAmBmCm@ DmEmFmGmHm~gicImJmjckclcb KmLmMmNmOmPmQmRmyiahbhchdhSmTm.iUmmcncVmWmocpcXmYmehZm0mfhziqcrcsc1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)mtcuc*m+m/i,m-mgh:i.m/m:m;mhh=m?m@m[m]mx [ y z A B C ] ^mih_m`m{m|m}mvcwc~manbncn9idnjhenfnHbIbJbD E KbgnhninjnknkhlnmnnnonpnqnrnxcycsnlhtnunmhvnwnxnynnhznAnBnCnDnEnFnzcGnAcBcCcubLbDcHnEcFcMbF InohJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:nAi;n=n?n@n[n]n^n_n`n{n|n}n~naobo;i=i?icodoeofogohoioi |eGcBiCiDijokolomonooopoqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpph'gHcMpNbNpOpPpQpRpSpTp^ UpVpWpXpYpqhIcZp0pJcKcLcc 1p2p3p4p5p6p7p8pEirhshthuh9p!p@i#pMcNc$p%pOcPc'p(pvh)p*pwhFiQcRcSc+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{pTcUc|p}p[i~paqxh]ibqcqdqeqyhfqgqhqiqjqG _ H I J K L ` kqzhlqmqnqoqpqVcWcqqrqsqtq!iuqAhvqwqObPbQbM N RbxqyqzqAqBqBhCqDqEqFqGqHqIqXcYcZc{ 0c1c| 2c3c4cJqChKqLqDhMqNqOqPqEhQqRqSqTqUqVqWq5cXq6c7c8cvbSb9cYq!c#cZqFhTbO 0qGh1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdr$cerGifrgrhrirjrkrlrmrnrorprqrrrsrtr^i_i`iurvrwrxryrzrArj Cf%cHiIiJiBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3sHh(g'c4sUb5s6s7s8s9s!s(c#s} $s%s's(s)sIh)c*s+s*c+c,cd ,s-s.s/s:s;s=s?sKiJhKhLhMh@s[s{i]s-c.c^s_s/c:c`s{sNh|s}sOhLi;c=c?c~satbtctdtetftgthtitjtktltmtntot@c[cptqt|irtstPh}ittutvtwtQhxtytztAtBtP ~ Q R S T U abCtRhDtEtFtGtHt]c^cItJtKtLt#iMtShNtOtVbWbXbV W YbPtQtRtStTtThUtVtWtXtYtZt0t_c`c{cbb|c}ccb~cadbd1tUh2t3tVh4t5t6t7tWh8t9t!t#t$t%t'tcd(tddedfdwbZbgd)thdid*tXh0bX +tYh,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvujdwuMixuyuzuAuBuCuDuEuFuGuHuIuJuKuLu~iajbjMuNuOuPuQuRuSuk 7fkdNiOiPiTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.vZh)gld/v1b:v;v=v?v@v[vmd]vdb^v_v`v{v|v0hnd}v~vodpdqde awbwcwdwewfwgwhwQi1h2h3h4hiwjwcjkwrdsdlwmwtdudnwow5hpwqw6hRivdwdxdrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwydzdHwIwdjJwKw7hejLwMwNwOw8hPwQwRwSwTwY ebZ 0 1 2 3 fbUw9hVwWwXwYwZwAdBd0w1w2w3w$i4w!h5w6w2b3b4b4 5 5b7w8w9w!w#w#h$w%w'w(w)w*w+wCdDdEdgbFdGdhbHdIdJd,w$h-w.w%h/w:w;w=w'h?w@w[w]w^w_w`wKd{wLdMdNdxb6bOd|wPdQd}w(h7b6 ~w)haxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxRdOxSiPxQxRxSxTxUxVxWxXxYxZx0x1x2x3xfjgjhj4x5x6x7x8x9x!xl bgSdTiUiVi#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzcz*h*gTddz8bezfzgzhzizjzUdkziblzmznzozpz+hVdqzrzWdXdYdf sztzuzvzwzxzyzzzWi,h-h.h/hAzBzijCzZd0dDzEz1d2dFzGz:hHzIz;hXi3d4d5dJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYz6d7dZz0zjj1z2z=hkj3z4z5z6z?h7z8z9z!z#z7 jb8 9 ! # $ kb$z@h%z'z(z)z*z8d9d+z,z-z.z%i/z[h:z;z9b!b#b% ' $b=z?z@z[z]z]h^z_z`z{z|z}z~z!d#d$dlb%d'dmb(d)d*daA^hbAcA_hdAeAfAgA`hhAiAjAkAlAmAnA+doA,d-d.dyb%b/dpA:d;dqA{h'b( rA|hsAtAuAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A=d6AYi7A8A9A!A#A$A%A'A(A)A*A+A,A-A.Aljmjnj/A:A;A=A?A@A[Am Gg?dZi0i1i]A^A_A`A{A|A}A~AaBbBcBdBeBfBgBhBiBjBkBlBmBnBoBpBqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuC}h+g@dvC(bwCxCyCzCACBC[dCCnbDCECFCGCHC~h]dICJC^d_d`dg KCLCMCNCOCPCQCRC2iaibicidiSCTCojUC{d|dVCWC}d~dXCeiYCZCfi3iaebe0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(Ccede)C*Cpj+C,Cgiqj-C.C/Chi:C;C=C?C@C) ob* + , - . pb[Cii]C^C_C`C{Cee|C}C~CaD'ibDjicDdD)b*b+b/ : ,beDfDgDhDiDkijDkDfegeqbheierbjekelelDlimDnDmioDpDqDrDnisDtDuDvDwDxDyDmezDneoepezb-bqeADreseBDoi.b; CDpiDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)Dte*D4i+D,D-D.D/D:D;D=D?D@D[D]D^D_D`Drjsjtj{D|D}D~DaEbEcEn !gue5i6i7idEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFqi,gveAF/bBFCFDFEFFFGFweHFsbIFJFKFLFMFrixeNFOFyezeAe

1011 error_handler = value 2*i:i]i}iejkjqj

1012 else: 

1013 exception_handlers[key] = value 2a ujvjwjxjyjzjAjBjsi-g.g/g:gCjDj(iEj:b;bFjGj=b?bHjIj;gJjKj=gti@b[b]bLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j^b_b1j2j)i3j4j?g*i5j6j7j8j@g9j!j#j$j%jo = p q r s t ? 'j[g(j)j*j+j,j`b{b-j.j/j:j8i;j]g=j?jAbBbCbu v Db@j[j]j^j_j^g`j{j|j}j~jakbk|b}bck_gdkek`gfkgkhkik{gjkkklkmknkokpk~bqkacbccctbEbdcrkecfcFbw sk|gtkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7kui8k9k!k#k$k%k'k(k)k*k+k,k-k.k/k+i,i-i:k;k=k?k@k[k]kh 3egcviwixi^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvm}g%ghcwmGbxmymzmAmBmCm@ DmEmFmGmHm~gicImJmjckclcb KmLmMmNmOmPmQmRmyiahbhchdhSmTm.iUmmcncVmWmocpcXmYmehZm0mfhziqcrcsc1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)mtcuc*m+m/i,m-mgh:i.m/m:m;mhh=m?m@m[m]mx [ y z A B C ] ^mih_m`m{m|m}mvcwc~manbncn9idnjhenfnHbIbJbD E KbgnhninjnknkhlnmnnnonpnqnrnxcycsnlhtnunmhvnwnxnynnhznAnBnCnDnEnFnzcGnAcBcCcubLbDcHnEcFcMbF InohJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:nAi;n=n?n@n[n]n^n_n`n{n|n}n~naobo;i=i?icodoeofogohoioi |eGcBiCiDijokolomonooopoqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpph'gHcMpNbNpOpPpQpRpSpTp^ UpVpWpXpYpqhIcZp0pJcKcLcc 1p2p3p4p5p6p7p8pEirhshthuh9p!p@i#pMcNc$p%pOcPc'p(pvh)p*pwhFiQcRcSc+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{pTcUc|p}p[i~paqxh]ibqcqdqeqyhfqgqhqiqjqG _ H I J K L ` kqzhlqmqnqoqpqVcWcqqrqsqtq!iuqAhvqwqObPbQbM N RbxqyqzqAqBqBhCqDqEqFqGqHqIqXcYcZc{ 0c1c| 2c3c4cJqChKqLqDhMqNqOqPqEhQqRqSqTqUqVqWq5cXq6c7c8cvbSb9cYq!c#cZqFhTbO 0qGh1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdr$cerGifrgrhrirjrkrlrmrnrorprqrrrsrtr^i_i`iurvrwrxryrzrArj Cf%cHiIiJiBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3sHh(g'c4sUb5s6s7s8s9s!s(c#s} $s%s's(s)sIh)c*s+s*c+c,cd ,s-s.s/s:s;s=s?sKiJhKhLhMh@s[s{i]s-c.c^s_s/c:c`s{sNh|s}sOhLi;c=c?c~satbtctdtetftgthtitjtktltmtntot@c[cptqt|irtstPh}ittutvtwtQhxtytztAtBtP ~ Q R S T U abCtRhDtEtFtGtHt]c^cItJtKtLt#iMtShNtOtVbWbXbV W YbPtQtRtStTtThUtVtWtXtYtZt0t_c`c{cbb|c}ccb~cadbd1tUh2t3tVh4t5t6t7tWh8t9t!t#t$t%t'tcd(tddedfdwbZbgd)thdid*tXh0bX +tYh,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvujdwuMixuyuzuAuBuCuDuEuFuGuHuIuJuKuLu~iajbjMuNuOuPuQuRuSuk 7fkdNiOiPiTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.vZh)gld/v1b:v;v=v?v@v[vmd]vdb^v_v`v{v|v0hnd}v~vodpdqde awbwcwdwewfwgwhwQi1h2h3h4hiwjwcjkwrdsdlwmwtdudnwow5hpwqw6hRivdwdxdrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwydzdHwIwdjJwKw7hejLwMwNwOw8hPwQwRwSwTwY ebZ 0 1 2 3 fbUw9hVwWwXwYwZwAdBd0w1w2w3w$i4w!h5w6w2b3b4b4 5 5b7w8w9w!w#w#h$w%w'w(w)w*w+wCdDdEdgbFdGdhbHdIdJd,w$h-w.w%h/w:w;w=w'h?w@w[w]w^w_w`wKd{wLdMdNdxb6bOd|wPdQd}w(h7b6 ~w)haxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxRdOxSiPxQxRxSxTxUxVxWxXxYxZx0x1x2x3xfjgjhj4x5x6x7x8x9x!xl bgSdTiUiVi#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzcz*h*gTddz8bezfzgzhzizjzUdkziblzmznzozpz+hVdqzrzWdXdYdf sztzuzvzwzxzyzzzWi,h-h.h/hAzBzijCzZd0dDzEz1d2dFzGz:hHzIz;hXi3d4d5dJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYz6d7dZz0zjj1z2z=hkj3z4z5z6z?h7z8z9z!z#z7 jb8 9 ! # $ kb$z@h%z'z(z)z*z8d9d+z,z-z.z%i/z[h:z;z9b!b#b% ' $b=z?z@z[z]z]h^z_z`z{z|z}z~z!d#d$dlb%d'dmb(d)d*daA^hbAcA_hdAeAfAgA`hhAiAjAkAlAmAnA+doA,d-d.dyb%b/dpA:d;dqA{h'b( rA|hsAtAuAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A=d6AYi7A8A9A!A#A$A%A'A(A)A*A+A,A-A.Aljmjnj/A:A;A=A?A@A[Am Gg?dZi0i1i]A^A_A`A{A|A}A~AaBbBcBdBeBfBgBhBiBjBkBlBmBnBoBpBqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuC}h+g@dvC(bwCxCyCzCACBC[dCCnbDCECFCGCHC~h]dICJC^d_d`dg KCLCMCNCOCPCQCRC2iaibicidiSCTCojUC{d|dVCWC}d~dXCeiYCZCfi3iaebe0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(Ccede)C*Cpj+C,Cgiqj-C.C/Chi:C;C=C?C@C) ob* + , - . pb[Cii]C^C_C`C{Cee|C}C~CaD'ibDjicDdD)b*b+b/ : ,beDfDgDhDiDkijDkDfegeqbheierbjekelelDlimDnDmioDpDqDrDnisDtDuDvDwDxDyDmezDneoepezb-bqeADreseBDoi.b; CDpiDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)Dte*D4i+D,D-D.D/D:D;D=D?D@D[D]D^D_D`Drjsjtj{D|D}D~DaEbEcEn !gue5i6i7idEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFqi,gveAF/bBFCFDFEFFFGFweHFsbIFJFKFLFMFrixeNFOFyezeAe

1014 

1015 middleware = ( 2a ujvjwjxjyjzjAjBjsi-g.g/g:gCjDj(iEj:b;bFjGj=b?bHjIj;gJjKj=gti@b[b]bLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j^b_b1j2j)i3j4j?g*i5j6j7j8j@g9j!j#j$j%jo = p q r s t ? 'j[g(j)j*j+j,j`b{b-j.j/j:j8i;j]g=j?jAbBbCbu v Db@j[j]j^j_j^g`j{j|j}j~jakbk|b}bck_gdkek`gfkgkhkik{gjkkklkmknkokpk~bqkacbccctbEbdcrkecfcFbw sk|gtkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7kui8k9k!k#k$k%k'k(k)k*k+k,k-k.k/k+i,i-i:k;k=k?k@k[k]kh 3egcviwixi^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvm}g%ghcwmGbxmymzmAmBmCm@ DmEmFmGmHm~gicImJmjckclcb KmLmMmNmOmPmQmRmyiahbhchdhSmTm.iUmmcncVmWmocpcXmYmehZm0mfhziqcrcsc1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)mtcuc*m+m/i,m-mgh:i.m/m:m;mhh=m?m@m[m]mx [ y z A B C ] ^mih_m`m{m|m}mvcwc~manbncn9idnjhenfnHbIbJbD E KbgnhninjnknkhlnmnnnonpnqnrnxcycsnlhtnunmhvnwnxnynnhznAnBnCnDnEnFnzcGnAcBcCcubLbDcHnEcFcMbF InohJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:nAi;n=n?n@n[n]n^n_n`n{n|n}n~naobo;i=i?icodoeofogohoioi |eGcBiCiDijokolomonooopoqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpph'gHcMpNbNpOpPpQpRpSpTp^ UpVpWpXpYpqhIcZp0pJcKcLcc 1p2p3p4p5p6p7p8pEirhshthuh9p!p@i#pMcNc$p%pOcPc'p(pvh)p*pwhFiQcRcSc+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{pTcUc|p}p[i~paqxh]ibqcqdqeqyhfqgqhqiqjqG _ H I J K L ` kqzhlqmqnqoqpqVcWcqqrqsqtq!iuqAhvqwqObPbQbM N RbxqyqzqAqBqBhCqDqEqFqGqHqIqXcYcZc{ 0c1c| 2c3c4cJqChKqLqDhMqNqOqPqEhQqRqSqTqUqVqWq5cXq6c7c8cvbSb9cYq!c#cZqFhTbO 0qGh1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdr$cerGifrgrhrirjrkrlrmrnrorprqrrrsrtr^i_i`iurvrwrxryrzrArj Cf%cHiIiJiBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3sHh(g'c4sUb5s6s7s8s9s!s(c#s} $s%s's(s)sIh)c*s+s*c+c,cd ,s-s.s/s:s;s=s?sKiJhKhLhMh@s[s{i]s-c.c^s_s/c:c`s{sNh|s}sOhLi;c=c?c~satbtctdtetftgthtitjtktltmtntot@c[cptqt|irtstPh}ittutvtwtQhxtytztAtBtP ~ Q R S T U abCtRhDtEtFtGtHt]c^cItJtKtLt#iMtShNtOtVbWbXbV W YbPtQtRtStTtThUtVtWtXtYtZt0t_c`c{cbb|c}ccb~cadbd1tUh2t3tVh4t5t6t7tWh8t9t!t#t$t%t'tcd(tddedfdwbZbgd)thdid*tXh0bX +tYh,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvujdwuMixuyuzuAuBuCuDuEuFuGuHuIuJuKuLu~iajbjMuNuOuPuQuRuSuk 7fkdNiOiPiTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.vZh)gld/v1b:v;v=v?v@v[vmd]vdb^v_v`v{v|v0hnd}v~vodpdqde awbwcwdwewfwgwhwQi1h2h3h4hiwjwcjkwrdsdlwmwtdudnwow5hpwqw6hRivdwdxdrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwydzdHwIwdjJwKw7hejLwMwNwOw8hPwQwRwSwTwY ebZ 0 1 2 3 fbUw9hVwWwXwYwZwAdBd0w1w2w3w$i4w!h5w6w2b3b4b4 5 5b7w8w9w!w#w#h$w%w'w(w)w*w+wCdDdEdgbFdGdhbHdIdJd,w$h-w.w%h/w:w;w=w'h?w@w[w]w^w_w`wKd{wLdMdNdxb6bOd|wPdQd}w(h7b6 ~w)haxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxRdOxSiPxQxRxSxTxUxVxWxXxYxZx0x1x2x3xfjgjhj4x5x6x7x8x9x!xl bgSdTiUiVi#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzcz*h*gTddz8bezfzgzhzizjzUdkziblzmznzozpz+hVdqzrzWdXdYdf sztzuzvzwzxzyzzzWi,h-h.h/hAzBzijCzZd0dDzEz1d2dFzGz:hHzIz;hXi3d4d5dJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYz6d7dZz0zjj1z2z=hkj3z4z5z6z?h7z8z9z!z#z7 jb8 9 ! # $ kb$z@h%z'z(z)z*z8d9d+z,z-z.z%i/z[h:z;z9b!b#b% ' $b=z?z@z[z]z]h^z_z`z{z|z}z~z!d#d$dlb%d'dmb(d)d*daA^hbAcA_hdAeAfAgA`hhAiAjAkAlAmAnA+doA,d-d.dyb%b/dpA:d;dqA{h'b( rA|hsAtAuAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A=d6AYi7A8A9A!A#A$A%A'A(A)A*A+A,A-A.Aljmjnj/A:A;A=A?A@A[Am Gg?dZi0i1i]A^A_A`A{A|A}A~AaBbBcBdBeBfBgBhBiBjBkBlBmBnBoBpBqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuC}h+g@dvC(bwCxCyCzCACBC[dCCnbDCECFCGCHC~h]dICJC^d_d`dg KCLCMCNCOCPCQCRC2iaibicidiSCTCojUC{d|dVCWC}d~dXCeiYCZCfi3iaebe0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(Ccede)C*Cpj+C,Cgiqj-C.C/Chi:C;C=C?C@C) ob* + , - . pb[Cii]C^C_C`C{Cee|C}C~CaD'ibDjicDdD)b*b+b/ : ,beDfDgDhDiDkijDkDfegeqbheierbjekelelDlimDnDmioDpDqDrDnisDtDuDvDwDxDyDmezDneoepezb-bqeADreseBDoi.b; CDpiDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)Dte*D4i+D,D-D.D/D:D;D=D?D@D[D]D^D_D`Drjsjtj{D|D}D~DaEbEcEn !gue5i6i7idEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFqi,gveAF/bBFCFDFEFFFGFweHFsbIFJFKFLFMFrixeNFOFyezeAe

1016 [Middleware(ServerErrorMiddleware, handler=error_handler, debug=debug)] 

1017 + self.user_middleware 

1018 + [ 

1019 Middleware( 

1020 ExceptionMiddleware, handlers=exception_handlers, debug=debug 

1021 ), 

1022 # Add FastAPI-specific AsyncExitStackMiddleware for closing files. 

1023 # Before this was also used for closing dependencies with yield but 

1024 # those now have their own AsyncExitStack, to properly support 

1025 # streaming responses while keeping compatibility with the previous 

1026 # versions (as of writing 0.117.1) that allowed doing 

1027 # except HTTPException inside a dependency with yield. 

1028 # This needs to happen after user middlewares because those create a 

1029 # new contextvars context copy by using a new AnyIO task group. 

1030 # This AsyncExitStack preserves the context for contextvars, not 

1031 # strictly necessary for closing files but it was one of the original 

1032 # intentions. 

1033 # If the AsyncExitStack lived outside of the custom middlewares and 

1034 # contextvars were set, for example in a dependency with 'yield' 

1035 # in that internal contextvars context, the values would not be 

1036 # available in the outer context of the AsyncExitStack. 

1037 # By placing the middleware and the AsyncExitStack here, inside all 

1038 # user middlewares, the same context is used. 

1039 # This is currently not needed, only for closing files, but used to be 

1040 # important when dependencies with yield were closed here. 

1041 Middleware(AsyncExitStackMiddleware), 

1042 ] 

1043 ) 

1044 

1045 app = self.router 2a ujvjwjxjyjzjAjBjsi-g.g/g:gCjDj(iEj:b;bFjGj=b?bHjIj;gJjKj=gti@b[b]bLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j^b_b1j2j)i3j4j?g*i5j6j7j8j@g9j!j#j$j%jo = p q r s t ? 'j[g(j)j*j+j,j`b{b-j.j/j:j8i;j]g=j?jAbBbCbu v Db@j[j]j^j_j^g`j{j|j}j~jakbk|b}bck_gdkek`gfkgkhkik{gjkkklkmknkokpk~bqkacbccctbEbdcrkecfcFbw sk|gtkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7kui8k9k!k#k$k%k'k(k)k*k+k,k-k.k/k+i,i-i:k;k=k?k@k[k]kh 3egcviwixi^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvm}g%ghcwmGbxmymzmAmBmCm@ DmEmFmGmHm~gicImJmjckclcb KmLmMmNmOmPmQmRmyiahbhchdhSmTm.iUmmcncVmWmocpcXmYmehZm0mfhziqcrcsc1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)mtcuc*m+m/i,m-mgh:i.m/m:m;mhh=m?m@m[m]mx [ y z A B C ] ^mih_m`m{m|m}mvcwc~manbncn9idnjhenfnHbIbJbD E KbgnhninjnknkhlnmnnnonpnqnrnxcycsnlhtnunmhvnwnxnynnhznAnBnCnDnEnFnzcGnAcBcCcubLbDcHnEcFcMbF InohJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:nAi;n=n?n@n[n]n^n_n`n{n|n}n~naobo;i=i?icodoeofogohoioi |eGcBiCiDijokolomonooopoqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpph'gHcMpNbNpOpPpQpRpSpTp^ UpVpWpXpYpqhIcZp0pJcKcLcc 1p2p3p4p5p6p7p8pEirhshthuh9p!p@i#pMcNc$p%pOcPc'p(pvh)p*pwhFiQcRcSc+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{pTcUc|p}p[i~paqxh]ibqcqdqeqyhfqgqhqiqjqG _ H I J K L ` kqzhlqmqnqoqpqVcWcqqrqsqtq!iuqAhvqwqObPbQbM N RbxqyqzqAqBqBhCqDqEqFqGqHqIqXcYcZc{ 0c1c| 2c3c4cJqChKqLqDhMqNqOqPqEhQqRqSqTqUqVqWq5cXq6c7c8cvbSb9cYq!c#cZqFhTbO 0qGh1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdr$cerGifrgrhrirjrkrlrmrnrorprqrrrsrtr^i_i`iurvrwrxryrzrArj Cf%cHiIiJiBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3sHh(g'c4sUb5s6s7s8s9s!s(c#s} $s%s's(s)sIh)c*s+s*c+c,cd ,s-s.s/s:s;s=s?sKiJhKhLhMh@s[s{i]s-c.c^s_s/c:c`s{sNh|s}sOhLi;c=c?c~satbtctdtetftgthtitjtktltmtntot@c[cptqt|irtstPh}ittutvtwtQhxtytztAtBtP ~ Q R S T U abCtRhDtEtFtGtHt]c^cItJtKtLt#iMtShNtOtVbWbXbV W YbPtQtRtStTtThUtVtWtXtYtZt0t_c`c{cbb|c}ccb~cadbd1tUh2t3tVh4t5t6t7tWh8t9t!t#t$t%t'tcd(tddedfdwbZbgd)thdid*tXh0bX +tYh,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvujdwuMixuyuzuAuBuCuDuEuFuGuHuIuJuKuLu~iajbjMuNuOuPuQuRuSuk 7fkdNiOiPiTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.vZh)gld/v1b:v;v=v?v@v[vmd]vdb^v_v`v{v|v0hnd}v~vodpdqde awbwcwdwewfwgwhwQi1h2h3h4hiwjwcjkwrdsdlwmwtdudnwow5hpwqw6hRivdwdxdrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwydzdHwIwdjJwKw7hejLwMwNwOw8hPwQwRwSwTwY ebZ 0 1 2 3 fbUw9hVwWwXwYwZwAdBd0w1w2w3w$i4w!h5w6w2b3b4b4 5 5b7w8w9w!w#w#h$w%w'w(w)w*w+wCdDdEdgbFdGdhbHdIdJd,w$h-w.w%h/w:w;w=w'h?w@w[w]w^w_w`wKd{wLdMdNdxb6bOd|wPdQd}w(h7b6 ~w)haxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxRdOxSiPxQxRxSxTxUxVxWxXxYxZx0x1x2x3xfjgjhj4x5x6x7x8x9x!xl bgSdTiUiVi#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzcz*h*gTddz8bezfzgzhzizjzUdkziblzmznzozpz+hVdqzrzWdXdYdf sztzuzvzwzxzyzzzWi,h-h.h/hAzBzijCzZd0dDzEz1d2dFzGz:hHzIz;hXi3d4d5dJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYz6d7dZz0zjj1z2z=hkj3z4z5z6z?h7z8z9z!z#z7 jb8 9 ! # $ kb$z@h%z'z(z)z*z8d9d+z,z-z.z%i/z[h:z;z9b!b#b% ' $b=z?z@z[z]z]h^z_z`z{z|z}z~z!d#d$dlb%d'dmb(d)d*daA^hbAcA_hdAeAfAgA`hhAiAjAkAlAmAnA+doA,d-d.dyb%b/dpA:d;dqA{h'b( rA|hsAtAuAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A=d6AYi7A8A9A!A#A$A%A'A(A)A*A+A,A-A.Aljmjnj/A:A;A=A?A@A[Am Gg?dZi0i1i]A^A_A`A{A|A}A~AaBbBcBdBeBfBgBhBiBjBkBlBmBnBoBpBqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuC}h+g@dvC(bwCxCyCzCACBC[dCCnbDCECFCGCHC~h]dICJC^d_d`dg KCLCMCNCOCPCQCRC2iaibicidiSCTCojUC{d|dVCWC}d~dXCeiYCZCfi3iaebe0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(Ccede)C*Cpj+C,Cgiqj-C.C/Chi:C;C=C?C@C) ob* + , - . pb[Cii]C^C_C`C{Cee|C}C~CaD'ibDjicDdD)b*b+b/ : ,beDfDgDhDiDkijDkDfegeqbheierbjekelelDlimDnDmioDpDqDrDnisDtDuDvDwDxDyDmezDneoepezb-bqeADreseBDoi.b; CDpiDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)Dte*D4i+D,D-D.D/D:D;D=D?D@D[D]D^D_D`Drjsjtj{D|D}D~DaEbEcEn !gue5i6i7idEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFqi,gveAF/bBFCFDFEFFFGFweHFsbIFJFKFLFMFrixeNFOFyezeAe

1046 for cls, args, kwargs in reversed(middleware): 2a ujvjwjxjyjzjAjBjsi-g.g/g:gCjDj(iEj:b;bFjGj=b?bHjIj;gJjKj=gti@b[b]bLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j^b_b1j2j)i3j4j?g*i5j6j7j8j@g9j!j#j$j%jo = p q r s t ? 'j[g(j)j*j+j,j`b{b-j.j/j:j8i;j]g=j?jAbBbCbu v Db@j[j]j^j_j^g`j{j|j}j~jakbk|b}bck_gdkek`gfkgkhkik{gjkkklkmknkokpk~bqkacbccctbEbdcrkecfcFbw sk|gtkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7kui8k9k!k#k$k%k'k(k)k*k+k,k-k.k/k+i,i-i:k;k=k?k@k[k]kh 3egcviwixi^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvm}g%ghcwmGbxmymzmAmBmCm@ DmEmFmGmHm~gicImJmjckclcb KmLmMmNmOmPmQmRmyiahbhchdhSmTm.iUmmcncVmWmocpcXmYmehZm0mfhziqcrcsc1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)mtcuc*m+m/i,m-mgh:i.m/m:m;mhh=m?m@m[m]mx [ y z A B C ] ^mih_m`m{m|m}mvcwc~manbncn9idnjhenfnHbIbJbD E KbgnhninjnknkhlnmnnnonpnqnrnxcycsnlhtnunmhvnwnxnynnhznAnBnCnDnEnFnzcGnAcBcCcubLbDcHnEcFcMbF InohJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:nAi;n=n?n@n[n]n^n_n`n{n|n}n~naobo;i=i?icodoeofogohoioi |eGcBiCiDijokolomonooopoqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpph'gHcMpNbNpOpPpQpRpSpTp^ UpVpWpXpYpqhIcZp0pJcKcLcc 1p2p3p4p5p6p7p8pEirhshthuh9p!p@i#pMcNc$p%pOcPc'p(pvh)p*pwhFiQcRcSc+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{pTcUc|p}p[i~paqxh]ibqcqdqeqyhfqgqhqiqjqG _ H I J K L ` kqzhlqmqnqoqpqVcWcqqrqsqtq!iuqAhvqwqObPbQbM N RbxqyqzqAqBqBhCqDqEqFqGqHqIqXcYcZc{ 0c1c| 2c3c4cJqChKqLqDhMqNqOqPqEhQqRqSqTqUqVqWq5cXq6c7c8cvbSb9cYq!c#cZqFhTbO 0qGh1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdr$cerGifrgrhrirjrkrlrmrnrorprqrrrsrtr^i_i`iurvrwrxryrzrArj Cf%cHiIiJiBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3sHh(g'c4sUb5s6s7s8s9s!s(c#s} $s%s's(s)sIh)c*s+s*c+c,cd ,s-s.s/s:s;s=s?sKiJhKhLhMh@s[s{i]s-c.c^s_s/c:c`s{sNh|s}sOhLi;c=c?c~satbtctdtetftgthtitjtktltmtntot@c[cptqt|irtstPh}ittutvtwtQhxtytztAtBtP ~ Q R S T U abCtRhDtEtFtGtHt]c^cItJtKtLt#iMtShNtOtVbWbXbV W YbPtQtRtStTtThUtVtWtXtYtZt0t_c`c{cbb|c}ccb~cadbd1tUh2t3tVh4t5t6t7tWh8t9t!t#t$t%t'tcd(tddedfdwbZbgd)thdid*tXh0bX +tYh,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvujdwuMixuyuzuAuBuCuDuEuFuGuHuIuJuKuLu~iajbjMuNuOuPuQuRuSuk 7fkdNiOiPiTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.vZh)gld/v1b:v;v=v?v@v[vmd]vdb^v_v`v{v|v0hnd}v~vodpdqde awbwcwdwewfwgwhwQi1h2h3h4hiwjwcjkwrdsdlwmwtdudnwow5hpwqw6hRivdwdxdrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwydzdHwIwdjJwKw7hejLwMwNwOw8hPwQwRwSwTwY ebZ 0 1 2 3 fbUw9hVwWwXwYwZwAdBd0w1w2w3w$i4w!h5w6w2b3b4b4 5 5b7w8w9w!w#w#h$w%w'w(w)w*w+wCdDdEdgbFdGdhbHdIdJd,w$h-w.w%h/w:w;w=w'h?w@w[w]w^w_w`wKd{wLdMdNdxb6bOd|wPdQd}w(h7b6 ~w)haxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxRdOxSiPxQxRxSxTxUxVxWxXxYxZx0x1x2x3xfjgjhj4x5x6x7x8x9x!xl bgSdTiUiVi#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzcz*h*gTddz8bezfzgzhzizjzUdkziblzmznzozpz+hVdqzrzWdXdYdf sztzuzvzwzxzyzzzWi,h-h.h/hAzBzijCzZd0dDzEz1d2dFzGz:hHzIz;hXi3d4d5dJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYz6d7dZz0zjj1z2z=hkj3z4z5z6z?h7z8z9z!z#z7 jb8 9 ! # $ kb$z@h%z'z(z)z*z8d9d+z,z-z.z%i/z[h:z;z9b!b#b% ' $b=z?z@z[z]z]h^z_z`z{z|z}z~z!d#d$dlb%d'dmb(d)d*daA^hbAcA_hdAeAfAgA`hhAiAjAkAlAmAnA+doA,d-d.dyb%b/dpA:d;dqA{h'b( rA|hsAtAuAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A=d6AYi7A8A9A!A#A$A%A'A(A)A*A+A,A-A.Aljmjnj/A:A;A=A?A@A[Am Gg?dZi0i1i]A^A_A`A{A|A}A~AaBbBcBdBeBfBgBhBiBjBkBlBmBnBoBpBqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuC}h+g@dvC(bwCxCyCzCACBC[dCCnbDCECFCGCHC~h]dICJC^d_d`dg KCLCMCNCOCPCQCRC2iaibicidiSCTCojUC{d|dVCWC}d~dXCeiYCZCfi3iaebe0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(Ccede)C*Cpj+C,Cgiqj-C.C/Chi:C;C=C?C@C) ob* + , - . pb[Cii]C^C_C`C{Cee|C}C~CaD'ibDjicDdD)b*b+b/ : ,beDfDgDhDiDkijDkDfegeqbheierbjekelelDlimDnDmioDpDqDrDnisDtDuDvDwDxDyDmezDneoepezb-bqeADreseBDoi.b; CDpiDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)Dte*D4i+D,D-D.D/D:D;D=D?D@D[D]D^D_D`Drjsjtj{D|D}D~DaEbEcEn !gue5i6i7idEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFqi,gveAF/bBFCFDFEFFFGFweHFsbIFJFKFLFMFrixeNFOFyezeAe

1047 app = cls(app, *args, **kwargs) 2a ujvjwjxjyjzjAjBjsi-g.g/g:gCjDj(iEj:b;bFjGj=b?bHjIj;gJjKj=gti@b[b]bLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j^b_b1j2j)i3j4j?g*i5j6j7j8j@g9j!j#j$j%jo = p q r s t ? 'j[g(j)j*j+j,j`b{b-j.j/j:j8i;j]g=j?jAbBbCbu v Db@j[j]j^j_j^g`j{j|j}j~jakbk|b}bck_gdkek`gfkgkhkik{gjkkklkmknkokpk~bqkacbccctbEbdcrkecfcFbw sk|gtkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7kui8k9k!k#k$k%k'k(k)k*k+k,k-k.k/k+i,i-i:k;k=k?k@k[k]kh 3egcviwixi^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvm}g%ghcwmGbxmymzmAmBmCm@ DmEmFmGmHm~gicImJmjckclcb KmLmMmNmOmPmQmRmyiahbhchdhSmTm.iUmmcncVmWmocpcXmYmehZm0mfhziqcrcsc1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)mtcuc*m+m/i,m-mgh:i.m/m:m;mhh=m?m@m[m]mx [ y z A B C ] ^mih_m`m{m|m}mvcwc~manbncn9idnjhenfnHbIbJbD E KbgnhninjnknkhlnmnnnonpnqnrnxcycsnlhtnunmhvnwnxnynnhznAnBnCnDnEnFnzcGnAcBcCcubLbDcHnEcFcMbF InohJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:nAi;n=n?n@n[n]n^n_n`n{n|n}n~naobo;i=i?icodoeofogohoioi |eGcBiCiDijokolomonooopoqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpph'gHcMpNbNpOpPpQpRpSpTp^ UpVpWpXpYpqhIcZp0pJcKcLcc 1p2p3p4p5p6p7p8pEirhshthuh9p!p@i#pMcNc$p%pOcPc'p(pvh)p*pwhFiQcRcSc+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{pTcUc|p}p[i~paqxh]ibqcqdqeqyhfqgqhqiqjqG _ H I J K L ` kqzhlqmqnqoqpqVcWcqqrqsqtq!iuqAhvqwqObPbQbM N RbxqyqzqAqBqBhCqDqEqFqGqHqIqXcYcZc{ 0c1c| 2c3c4cJqChKqLqDhMqNqOqPqEhQqRqSqTqUqVqWq5cXq6c7c8cvbSb9cYq!c#cZqFhTbO 0qGh1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdr$cerGifrgrhrirjrkrlrmrnrorprqrrrsrtr^i_i`iurvrwrxryrzrArj Cf%cHiIiJiBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3sHh(g'c4sUb5s6s7s8s9s!s(c#s} $s%s's(s)sIh)c*s+s*c+c,cd ,s-s.s/s:s;s=s?sKiJhKhLhMh@s[s{i]s-c.c^s_s/c:c`s{sNh|s}sOhLi;c=c?c~satbtctdtetftgthtitjtktltmtntot@c[cptqt|irtstPh}ittutvtwtQhxtytztAtBtP ~ Q R S T U abCtRhDtEtFtGtHt]c^cItJtKtLt#iMtShNtOtVbWbXbV W YbPtQtRtStTtThUtVtWtXtYtZt0t_c`c{cbb|c}ccb~cadbd1tUh2t3tVh4t5t6t7tWh8t9t!t#t$t%t'tcd(tddedfdwbZbgd)thdid*tXh0bX +tYh,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvujdwuMixuyuzuAuBuCuDuEuFuGuHuIuJuKuLu~iajbjMuNuOuPuQuRuSuk 7fkdNiOiPiTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.vZh)gld/v1b:v;v=v?v@v[vmd]vdb^v_v`v{v|v0hnd}v~vodpdqde awbwcwdwewfwgwhwQi1h2h3h4hiwjwcjkwrdsdlwmwtdudnwow5hpwqw6hRivdwdxdrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwydzdHwIwdjJwKw7hejLwMwNwOw8hPwQwRwSwTwY ebZ 0 1 2 3 fbUw9hVwWwXwYwZwAdBd0w1w2w3w$i4w!h5w6w2b3b4b4 5 5b7w8w9w!w#w#h$w%w'w(w)w*w+wCdDdEdgbFdGdhbHdIdJd,w$h-w.w%h/w:w;w=w'h?w@w[w]w^w_w`wKd{wLdMdNdxb6bOd|wPdQd}w(h7b6 ~w)haxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxRdOxSiPxQxRxSxTxUxVxWxXxYxZx0x1x2x3xfjgjhj4x5x6x7x8x9x!xl bgSdTiUiVi#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzcz*h*gTddz8bezfzgzhzizjzUdkziblzmznzozpz+hVdqzrzWdXdYdf sztzuzvzwzxzyzzzWi,h-h.h/hAzBzijCzZd0dDzEz1d2dFzGz:hHzIz;hXi3d4d5dJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYz6d7dZz0zjj1z2z=hkj3z4z5z6z?h7z8z9z!z#z7 jb8 9 ! # $ kb$z@h%z'z(z)z*z8d9d+z,z-z.z%i/z[h:z;z9b!b#b% ' $b=z?z@z[z]z]h^z_z`z{z|z}z~z!d#d$dlb%d'dmb(d)d*daA^hbAcA_hdAeAfAgA`hhAiAjAkAlAmAnA+doA,d-d.dyb%b/dpA:d;dqA{h'b( rA|hsAtAuAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A=d6AYi7A8A9A!A#A$A%A'A(A)A*A+A,A-A.Aljmjnj/A:A;A=A?A@A[Am Gg?dZi0i1i]A^A_A`A{A|A}A~AaBbBcBdBeBfBgBhBiBjBkBlBmBnBoBpBqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuC}h+g@dvC(bwCxCyCzCACBC[dCCnbDCECFCGCHC~h]dICJC^d_d`dg KCLCMCNCOCPCQCRC2iaibicidiSCTCojUC{d|dVCWC}d~dXCeiYCZCfi3iaebe0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(Ccede)C*Cpj+C,Cgiqj-C.C/Chi:C;C=C?C@C) ob* + , - . pb[Cii]C^C_C`C{Cee|C}C~CaD'ibDjicDdD)b*b+b/ : ,beDfDgDhDiDkijDkDfegeqbheierbjekelelDlimDnDmioDpDqDrDnisDtDuDvDwDxDyDmezDneoepezb-bqeADreseBDoi.b; CDpiDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)Dte*D4i+D,D-D.D/D:D;D=D?D@D[D]D^D_D`Drjsjtj{D|D}D~DaEbEcEn !gue5i6i7idEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFqi,gveAF/bBFCFDFEFFFGFweHFsbIFJFKFLFMFrixeNFOFyezeAe

1048 return app 2a ujvjwjxjyjzjAjBjsi-g.g/g:gCjDj(iEj:b;bFjGj=b?bHjIj;gJjKj=gti@b[b]bLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j^b_b1j2j)i3j4j?g*i5j6j7j8j@g9j!j#j$j%jo = p q r s t ? 'j[g(j)j*j+j,j`b{b-j.j/j:j8i;j]g=j?jAbBbCbu v Db@j[j]j^j_j^g`j{j|j}j~jakbk|b}bck_gdkek`gfkgkhkik{gjkkklkmknkokpk~bqkacbccctbEbdcrkecfcFbw sk|gtkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7kui8k9k!k#k$k%k'k(k)k*k+k,k-k.k/k+i,i-i:k;k=k?k@k[k]kh 3egcviwixi^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvm}g%ghcwmGbxmymzmAmBmCm@ DmEmFmGmHm~gicImJmjckclcb KmLmMmNmOmPmQmRmyiahbhchdhSmTm.iUmmcncVmWmocpcXmYmehZm0mfhziqcrcsc1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)mtcuc*m+m/i,m-mgh:i.m/m:m;mhh=m?m@m[m]mx [ y z A B C ] ^mih_m`m{m|m}mvcwc~manbncn9idnjhenfnHbIbJbD E KbgnhninjnknkhlnmnnnonpnqnrnxcycsnlhtnunmhvnwnxnynnhznAnBnCnDnEnFnzcGnAcBcCcubLbDcHnEcFcMbF InohJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:nAi;n=n?n@n[n]n^n_n`n{n|n}n~naobo;i=i?icodoeofogohoioi |eGcBiCiDijokolomonooopoqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpph'gHcMpNbNpOpPpQpRpSpTp^ UpVpWpXpYpqhIcZp0pJcKcLcc 1p2p3p4p5p6p7p8pEirhshthuh9p!p@i#pMcNc$p%pOcPc'p(pvh)p*pwhFiQcRcSc+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{pTcUc|p}p[i~paqxh]ibqcqdqeqyhfqgqhqiqjqG _ H I J K L ` kqzhlqmqnqoqpqVcWcqqrqsqtq!iuqAhvqwqObPbQbM N RbxqyqzqAqBqBhCqDqEqFqGqHqIqXcYcZc{ 0c1c| 2c3c4cJqChKqLqDhMqNqOqPqEhQqRqSqTqUqVqWq5cXq6c7c8cvbSb9cYq!c#cZqFhTbO 0qGh1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdr$cerGifrgrhrirjrkrlrmrnrorprqrrrsrtr^i_i`iurvrwrxryrzrArj Cf%cHiIiJiBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3sHh(g'c4sUb5s6s7s8s9s!s(c#s} $s%s's(s)sIh)c*s+s*c+c,cd ,s-s.s/s:s;s=s?sKiJhKhLhMh@s[s{i]s-c.c^s_s/c:c`s{sNh|s}sOhLi;c=c?c~satbtctdtetftgthtitjtktltmtntot@c[cptqt|irtstPh}ittutvtwtQhxtytztAtBtP ~ Q R S T U abCtRhDtEtFtGtHt]c^cItJtKtLt#iMtShNtOtVbWbXbV W YbPtQtRtStTtThUtVtWtXtYtZt0t_c`c{cbb|c}ccb~cadbd1tUh2t3tVh4t5t6t7tWh8t9t!t#t$t%t'tcd(tddedfdwbZbgd)thdid*tXh0bX +tYh,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvujdwuMixuyuzuAuBuCuDuEuFuGuHuIuJuKuLu~iajbjMuNuOuPuQuRuSuk 7fkdNiOiPiTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.vZh)gld/v1b:v;v=v?v@v[vmd]vdb^v_v`v{v|v0hnd}v~vodpdqde awbwcwdwewfwgwhwQi1h2h3h4hiwjwcjkwrdsdlwmwtdudnwow5hpwqw6hRivdwdxdrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwydzdHwIwdjJwKw7hejLwMwNwOw8hPwQwRwSwTwY ebZ 0 1 2 3 fbUw9hVwWwXwYwZwAdBd0w1w2w3w$i4w!h5w6w2b3b4b4 5 5b7w8w9w!w#w#h$w%w'w(w)w*w+wCdDdEdgbFdGdhbHdIdJd,w$h-w.w%h/w:w;w=w'h?w@w[w]w^w_w`wKd{wLdMdNdxb6bOd|wPdQd}w(h7b6 ~w)haxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxRdOxSiPxQxRxSxTxUxVxWxXxYxZx0x1x2x3xfjgjhj4x5x6x7x8x9x!xl bgSdTiUiVi#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzcz*h*gTddz8bezfzgzhzizjzUdkziblzmznzozpz+hVdqzrzWdXdYdf sztzuzvzwzxzyzzzWi,h-h.h/hAzBzijCzZd0dDzEz1d2dFzGz:hHzIz;hXi3d4d5dJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYz6d7dZz0zjj1z2z=hkj3z4z5z6z?h7z8z9z!z#z7 jb8 9 ! # $ kb$z@h%z'z(z)z*z8d9d+z,z-z.z%i/z[h:z;z9b!b#b% ' $b=z?z@z[z]z]h^z_z`z{z|z}z~z!d#d$dlb%d'dmb(d)d*daA^hbAcA_hdAeAfAgA`hhAiAjAkAlAmAnA+doA,d-d.dyb%b/dpA:d;dqA{h'b( rA|hsAtAuAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A=d6AYi7A8A9A!A#A$A%A'A(A)A*A+A,A-A.Aljmjnj/A:A;A=A?A@A[Am Gg?dZi0i1i]A^A_A`A{A|A}A~AaBbBcBdBeBfBgBhBiBjBkBlBmBnBoBpBqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuC}h+g@dvC(bwCxCyCzCACBC[dCCnbDCECFCGCHC~h]dICJC^d_d`dg KCLCMCNCOCPCQCRC2iaibicidiSCTCojUC{d|dVCWC}d~dXCeiYCZCfi3iaebe0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(Ccede)C*Cpj+C,Cgiqj-C.C/Chi:C;C=C?C@C) ob* + , - . pb[Cii]C^C_C`C{Cee|C}C~CaD'ibDjicDdD)b*b+b/ : ,beDfDgDhDiDkijDkDfegeqbheierbjekelelDlimDnDmioDpDqDrDnisDtDuDvDwDxDyDmezDneoepezb-bqeADreseBDoi.b; CDpiDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)Dte*D4i+D,D-D.D/D:D;D=D?D@D[D]D^D_D`Drjsjtj{D|D}D~DaEbEcEn !gue5i6i7idEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFqi,gveAF/bBFCFDFEFFFGFweHFsbIFJFKFLFMFrixeNFOFyezeAe

1049 

1050 def openapi(self) -> Dict[str, Any]: 1abcdefg

1051 """ 

1052 Generate the OpenAPI schema of the application. This is called by FastAPI 

1053 internally. 

1054 

1055 The first time it is called it stores the result in the attribute 

1056 `app.openapi_schema`, and next times it is called, it just returns that same 

1057 result. To avoid the cost of generating the schema every time. 

1058 

1059 If you need to modify the generated OpenAPI schema, you could modify it. 

1060 

1061 Read more in the 

1062 [FastAPI docs for OpenAPI](https://fastapi.tiangolo.com/how-to/extending-openapi/). 

1063 """ 

1064 if not self.openapi_schema: 2;F=F?Fsi-g.g/g:g@F[F]F^F;g_F=g`FPF{F?g|F}F@g~Fo = p q r s t ? aG[gbGcGdGeGfGgGhGiG]gjGkGu v lGmG^gnGoGpGqGrGsG_gtGuG`gvG{gwGxGyGw |gzGAGBGCGDGEGFGGGHGIGJGKGLGMGNGOGPGQGRGSGTGUGVGWGXGYGZG0G1G2G3G4G5G6G7G8G9G!G#G$G!FQFRF*F%G'G(G)G*G+G,G-Gh .G/G:G;G=G?G@G[G]G^G_G`G{G|G}G~GaHbHcHdHeHfHgHhHiHjHkHlHmHnHoHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHEHFHGHHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H:H;H=H?H@H[H]H^H_H`H{H}g%g|H}H~H@ aIbI~gcIdIeIyiahbhchdhfIgIhIiIehjIfhkISFlIghmInIhhoIx [ y z A B C ] pIihqIrIsItIuIvIwIxIjhyIzID E AIBIkhCIDIEIFIGIHIlhIIJImhKInhLIMINIF ohOIPIQIRISITIUIVIWIXIYIZI0I1I2I3I4I5I6I7I8I9I!I#I$I%I'I(I)I*I+I,I-I.I/I:I;I=I?I@I#FTFUF+F[I]I^I_I`I{I|I}Ii ~IaJbJcJdJeJfJgJhJiJjJkJlJmJnJoJpJqJrJsJtJuJvJwJxJyJzJAJBJCJDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJTJUJVJWJXJYJZJ0J1J2J3J4J5J6J7J8J9J!J#J$J%J'J(J)J*J+J,J-J.J/J:J;J=J?J@J[J]J^J_J`J{J|J}J~JaKbKcKdKeKfKgKhKiKjKkKlKph'gmKnKoK^ pKqKqhrKsKtKEirhshthuhuKvKwKxKvhyKwhzKVFAKxhBKCKyhDKG _ H I J K L ` EKzhFKGKHKIKJKKKLKMKAhNKOKM N PKQKBhRKSKTKUKVKWK{ | ChXKYKDhZKEh0K1K2KFhO Gh3K4K5K6K7K8K9K!K#K$K%K'K(K)K*K+K,K-K.K/K:K;K=K?K@K[K]K^K_K`K{K|K}K~KaLbLcLdLeLfL$FWFXF,FgLhLiLjLkLlLmLnLj oLpLqLrLsLtLuLvLwLxLyLzLALBLCLDLELFLGLHLILJLKLLLMLNLOLPLQLRLSLTLULVLWLXLYLZL0L1L2L3L4L5L6L7L8L9L!L#L$L%L'L(L)L*L+L,L-L.L/L:L;L=L?L@L[L]L^L_L`L{L|L}L~LaMbMcMdMeMfMgMhMiMjMkMlMmMnMoMpMqMrMsMtMuMvMwMxMyMzMAMHh(gBMCMDM} EMFMIhGMHMIMKiJhKhLhMhJMKMLMMMNhNMOhOMYFPMPhQMRMQhSMP ~ Q R S T U abTMRhUMVMWMXMYMZM0M1MSh2M3MV W 4M5MTh6M7M8M9M!M#MbbcbUh$M%MVh'MWh(M)M*MXhX Yh+M,M-M.M/M:M;M=M?M@M[M]M^M_M`M{M|M}M~MaNbNcNdNeNfNgNhNiNjNkNlNmNnNoNpNqNrNsNtNuN%FZF0F-FvNwNxNyNzNANBNCNk DNENFNGNHNINJNKNLNMNNNONPNQNRNSNTNUNVNWNXNYNZN0N1N2N3N4N5N6N7N8N9N!N#N$N%N'N(N)N*N+N,N-N.N/N:N;N=N?N@N[N]N^N_N`N{N|N}N~NaObOcOdOeOfOgOhOiOjOkOlOmOnOoOpOqOrOsOtOuOvOwOxOyOzOAOBOCODOEOFOGOHOIOJOKOLOMONOOOPOZh)gQOROSOdbTOUO0hVOWOXOQi1h2h3h4hYOZO0O1O5h2O6h3O1F4O7h5O6O8h7OY ebZ 0 1 2 3 fb8O9h9O!O#O$O%O'O(O)O!h*O+O4 5 ,O-O#h.O/O:O;O=O?Ogbhb$h@O[O%h]O'h^O_O`O(h6 )h{O|O}O~OaPbPcPdPePfPgPhPiPjPkPlPmPnPoPpPqPrPsPtPuPvPwPxPyPzPAPBPCPDPEPFPGPHPIPJP'F2F3F.FKPLPMPNPOPPPQPRPl SPTPUPVPWPXPYPZP0P1P2P3P4P5P6P7P8P9P!P#P$P%P'P(P)P*P+P,P-P.P/P:P;P=P?P@P[P]P^P_P`P{P|P}P~PaQbQcQdQeQfQgQhQiQjQkQlQmQnQoQpQqQrQsQtQuQvQwQxQyQzQAQBQCQDQEQFQGQHQIQJQKQLQMQNQOQPQQQRQSQTQUQVQWQXQYQZQ0Q1Q2Q3Q4Q*h*g5Q6Q7Qib8Q9Q+h!Q#Q$QWi,h-h.h/h%Q'Q(Q)Q:h*Q;h+Q4F,Q=h-Q.Q?h/Q7 jb8 9 ! # $ kb:Q@h;Q=Q?Q@Q[Q]Q^Q_Q[h`Q{Q% ' |Q}Q]h~QaRbRcRdReRlbmb^hfRgR_hhR`hiRjRkR{h( |hlRmRnRoRpRqRrRsRtRuRvRwRxRyRzRARBRCRDRERFRGRHRIRJRKRLRMRNRORPRQRRRSRTRURVRWRXRYR(F5F6F/FZR0R1R2R3R4R5R6Rm 7R8R9R!R#R$R%R'R(R)R*R+R,R-R.R/R:R;R=R?R@R[R]R^R_R`R{R|R}R~RaSbScSdSeSfSgShSiSjSkSlSmSnSoSpSqSrSsStSuSvSwSxSySzSASBSCSDSESFSGSHSISJSKSLSMSNSOSPSQSRSSSTSUSVSWSXSYSZS0S1S2S3S4S5S6S7S8S9S!S#S$S%S'S(S)S*S+S,S}h+g-S.S/Snb:S;S~h=S?S@S2iaibicidi[S]S^Sei_Sfi`S7F{Sgi|Shi}S) ob* + , - . pb~SiiaTbTcTdTeTfTgThTjiiTjT/ : kTlTkimTqbrblinToTmipTniqTrTsToi; pitTuTvTwTxTyTzTATBTCTDTETFTGTHTITJTKTLTMTNTOTPTQTRTSTTTUTVTWTXTYTZT0T1T2T3T4T5T6T)F8F9F:F7T8T9T!T#T$T%Tn 'T(T)T*T+T,T-T.T/T:T;T=T?T@T[T]T^T_T`T{T|T}T~TaUbUcUdUeUfUgUhUiUjUkUlUmUnUoUpUqUrUsUtUuUvUwUxUyUzUAUBUCUDUEUFUGUHUIUJUKULUMUNUOUPUQURUSUTUUUVUWUXUYUZU0U1U2U3U4U5U6U7U8U9U!U#U$U%U'U(U)U*Uqi,g+U,U-Usb.U/Uri

1065 self.openapi_schema = get_openapi( 2;F=F?Fsi-g.g/g:g@F[F]F^F;g_F=g`FPF{F?g|F}F@g~Fo = p q r s t ? aG[gbGcGdGeGfGgGhGiG]gjGkGu v lGmG^gnGoGpGqGrGsG_gtGuG`gvG{gwGxGyGw |gzGAGBGCGDGEGFGGGHGIGJGKGLGMGNGOGPGQGRGSGTGUGVGWGXGYGZG0G1G2G3G4G5G6G7G8G9G!G#G$G!FQFRF*F%G'G(G)G*G+G,G-Gh .G/G:G;G=G?G@G[G]G^G_G`G{G|G}G~GaHbHcHdHeHfHgHhHiHjHkHlHmHnHoHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHEHFHGHHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H:H;H=H?H@H[H]H^H_H`H{H}g%g|H}H~H@ aIbI~gcIdIeIyiahbhchdhfIgIhIiIehjIfhkISFlIghmInIhhoIx [ y z A B C ] pIihqIrIsItIuIvIwIxIjhyIzID E AIBIkhCIDIEIFIGIHIlhIIJImhKInhLIMINIF ohOIPIQIRISITIUIVIWIXIYIZI0I1I2I3I4I5I6I7I8I9I!I#I$I%I'I(I)I*I+I,I-I.I/I:I;I=I?I@I#FTFUF+F[I]I^I_I`I{I|I}Ii ~IaJbJcJdJeJfJgJhJiJjJkJlJmJnJoJpJqJrJsJtJuJvJwJxJyJzJAJBJCJDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJTJUJVJWJXJYJZJ0J1J2J3J4J5J6J7J8J9J!J#J$J%J'J(J)J*J+J,J-J.J/J:J;J=J?J@J[J]J^J_J`J{J|J}J~JaKbKcKdKeKfKgKhKiKjKkKlKph'gmKnKoK^ pKqKqhrKsKtKEirhshthuhuKvKwKxKvhyKwhzKVFAKxhBKCKyhDKG _ H I J K L ` EKzhFKGKHKIKJKKKLKMKAhNKOKM N PKQKBhRKSKTKUKVKWK{ | ChXKYKDhZKEh0K1K2KFhO Gh3K4K5K6K7K8K9K!K#K$K%K'K(K)K*K+K,K-K.K/K:K;K=K?K@K[K]K^K_K`K{K|K}K~KaLbLcLdLeLfL$FWFXF,FgLhLiLjLkLlLmLnLj oLpLqLrLsLtLuLvLwLxLyLzLALBLCLDLELFLGLHLILJLKLLLMLNLOLPLQLRLSLTLULVLWLXLYLZL0L1L2L3L4L5L6L7L8L9L!L#L$L%L'L(L)L*L+L,L-L.L/L:L;L=L?L@L[L]L^L_L`L{L|L}L~LaMbMcMdMeMfMgMhMiMjMkMlMmMnMoMpMqMrMsMtMuMvMwMxMyMzMAMHh(gBMCMDM} EMFMIhGMHMIMKiJhKhLhMhJMKMLMMMNhNMOhOMYFPMPhQMRMQhSMP ~ Q R S T U abTMRhUMVMWMXMYMZM0M1MSh2M3MV W 4M5MTh6M7M8M9M!M#MbbcbUh$M%MVh'MWh(M)M*MXhX Yh+M,M-M.M/M:M;M=M?M@M[M]M^M_M`M{M|M}M~MaNbNcNdNeNfNgNhNiNjNkNlNmNnNoNpNqNrNsNtNuN%FZF0F-FvNwNxNyNzNANBNCNk DNENFNGNHNINJNKNLNMNNNONPNQNRNSNTNUNVNWNXNYNZN0N1N2N3N4N5N6N7N8N9N!N#N$N%N'N(N)N*N+N,N-N.N/N:N;N=N?N@N[N]N^N_N`N{N|N}N~NaObOcOdOeOfOgOhOiOjOkOlOmOnOoOpOqOrOsOtOuOvOwOxOyOzOAOBOCODOEOFOGOHOIOJOKOLOMONOOOPOZh)gQOROSOdbTOUO0hVOWOXOQi1h2h3h4hYOZO0O1O5h2O6h3O1F4O7h5O6O8h7OY ebZ 0 1 2 3 fb8O9h9O!O#O$O%O'O(O)O!h*O+O4 5 ,O-O#h.O/O:O;O=O?Ogbhb$h@O[O%h]O'h^O_O`O(h6 )h{O|O}O~OaPbPcPdPePfPgPhPiPjPkPlPmPnPoPpPqPrPsPtPuPvPwPxPyPzPAPBPCPDPEPFPGPHPIPJP'F2F3F.FKPLPMPNPOPPPQPRPl SPTPUPVPWPXPYPZP0P1P2P3P4P5P6P7P8P9P!P#P$P%P'P(P)P*P+P,P-P.P/P:P;P=P?P@P[P]P^P_P`P{P|P}P~PaQbQcQdQeQfQgQhQiQjQkQlQmQnQoQpQqQrQsQtQuQvQwQxQyQzQAQBQCQDQEQFQGQHQIQJQKQLQMQNQOQPQQQRQSQTQUQVQWQXQYQZQ0Q1Q2Q3Q4Q*h*g5Q6Q7Qib8Q9Q+h!Q#Q$QWi,h-h.h/h%Q'Q(Q)Q:h*Q;h+Q4F,Q=h-Q.Q?h/Q7 jb8 9 ! # $ kb:Q@h;Q=Q?Q@Q[Q]Q^Q_Q[h`Q{Q% ' |Q}Q]h~QaRbRcRdReRlbmb^hfRgR_hhR`hiRjRkR{h( |hlRmRnRoRpRqRrRsRtRuRvRwRxRyRzRARBRCRDRERFRGRHRIRJRKRLRMRNRORPRQRRRSRTRURVRWRXRYR(F5F6F/FZR0R1R2R3R4R5R6Rm 7R8R9R!R#R$R%R'R(R)R*R+R,R-R.R/R:R;R=R?R@R[R]R^R_R`R{R|R}R~RaSbScSdSeSfSgShSiSjSkSlSmSnSoSpSqSrSsStSuSvSwSxSySzSASBSCSDSESFSGSHSISJSKSLSMSNSOSPSQSRSSSTSUSVSWSXSYSZS0S1S2S3S4S5S6S7S8S9S!S#S$S%S'S(S)S*S+S,S}h+g-S.S/Snb:S;S~h=S?S@S2iaibicidi[S]S^Sei_Sfi`S7F{Sgi|Shi}S) ob* + , - . pb~SiiaTbTcTdTeTfTgThTjiiTjT/ : kTlTkimTqbrblinToTmipTniqTrTsToi; pitTuTvTwTxTyTzTATBTCTDTETFTGTHTITJTKTLTMTNTOTPTQTRTSTTTUTVTWTXTYTZT0T1T2T3T4T5T6T)F8F9F:F7T8T9T!T#T$T%Tn 'T(T)T*T+T,T-T.T/T:T;T=T?T@T[T]T^T_T`T{T|T}T~TaUbUcUdUeUfUgUhUiUjUkUlUmUnUoUpUqUrUsUtUuUvUwUxUyUzUAUBUCUDUEUFUGUHUIUJUKULUMUNUOUPUQURUSUTUUUVUWUXUYUZU0U1U2U3U4U5U6U7U8U9U!U#U$U%U'U(U)U*Uqi,g+U,U-Usb.U/Uri

1066 title=self.title, 

1067 version=self.version, 

1068 openapi_version=self.openapi_version, 

1069 summary=self.summary, 

1070 description=self.description, 

1071 terms_of_service=self.terms_of_service, 

1072 contact=self.contact, 

1073 license_info=self.license_info, 

1074 routes=self.routes, 

1075 webhooks=self.webhooks.routes, 

1076 tags=self.openapi_tags, 

1077 servers=self.servers, 

1078 separate_input_output_schemas=self.separate_input_output_schemas, 

1079 external_docs=self.openapi_external_docs, 

1080 ) 

1081 return self.openapi_schema 2;F=F?F-g.g/g:g@F[F]F^F;g_F=g`FPF{F?g|F}F@g~Fo = p q r s t ? aG[gbGcGdGeGfGgGhGiG]gjGkGu v lGmG^gnGoGpGqGrGsG_gtGuG`gvG{gwGxGyGw |gzGAGBGCGDGEGFGGGHGIGJGKGLGMGNGOGPGQGRGSGTGUGVGWGXGYGZG0G1G2G3G4G5G6G7G8G9G!G#G$G!FQFRF*F%G'G(G)G*G+G,G-Gh .G/G:G;G=G?G@G[G]G^G_G`G{G|G}G~GaHbHcHdHeHfHgHhHiHjHkHlHmHnHoHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHEHFHGHHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H:H;H=H?H@H[H]H^H_H`H{H}g%g|H}H~H@ aIbI~gcIdIeIahbhchdhfIgIhIiIehjIfhkISFlIghmInIhhoIx [ y z A B C ] pIihqIrIsItIuIvIwIxIjhyIzID E AIBIkhCIDIEIFIGIHIlhIIJImhKInhLIMINIF ohOIPIQIRISITIUIVIWIXIYIZI0I1I2I3I4I5I6I7I8I9I!I#I$I%I'I(I)I*I+I,I-I.I/I:I;I=I?I@I#FTFUF+F[I]I^I_I`I{I|I}Ii ~IaJbJcJdJeJfJgJhJiJjJkJlJmJnJoJpJqJrJsJtJuJvJwJxJyJzJAJBJCJDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJTJUJVJWJXJYJZJ0J1J2J3J4J5J6J7J8J9J!J#J$J%J'J(J)J*J+J,J-J.J/J:J;J=J?J@J[J]J^J_J`J{J|J}J~JaKbKcKdKeKfKgKhKiKjKkKlKph'gmKnKoK^ pKqKqhrKsKtKrhshthuhuKvKwKxKvhyKwhzKVFAKxhBKCKyhDKG _ H I J K L ` EKzhFKGKHKIKJKKKLKMKAhNKOKM N PKQKBhRKSKTKUKVKWK{ | ChXKYKDhZKEh0K1K2KFhO Gh3K4K5K6K7K8K9K!K#K$K%K'K(K)K*K+K,K-K.K/K:K;K=K?K@K[K]K^K_K`K{K|K}K~KaLbLcLdLeLfL$FWFXF,FgLhLiLjLkLlLmLnLj oLpLqLrLsLtLuLvLwLxLyLzLALBLCLDLELFLGLHLILJLKLLLMLNLOLPLQLRLSLTLULVLWLXLYLZL0L1L2L3L4L5L6L7L8L9L!L#L$L%L'L(L)L*L+L,L-L.L/L:L;L=L?L@L[L]L^L_L`L{L|L}L~LaMbMcMdMeMfMgMhMiMjMkMlMmMnMoMpMqMrMsMtMuMvMwMxMyMzMAMHh(gBMCMDM} EMFMIhGMHMIMJhKhLhMhJMKMLMMMNhNMOhOMYFPMPhQMRMQhSMP ~ Q R S T U abTMRhUMVMWMXMYMZM0M1MSh2M3MV W 4M5MTh6M7M8M9M!M#MbbcbUh$M%MVh'MWh(M)M*MXhX Yh+M,M-M.M/M:M;M=M?M@M[M]M^M_M`M{M|M}M~MaNbNcNdNeNfNgNhNiNjNkNlNmNnNoNpNqNrNsNtNuN%FZF0F-FvNwNxNyNzNANBNCNk DNENFNGNHNINJNKNLNMNNNONPNQNRNSNTNUNVNWNXNYNZN0N1N2N3N4N5N6N7N8N9N!N#N$N%N'N(N)N*N+N,N-N.N/N:N;N=N?N@N[N]N^N_N`N{N|N}N~NaObOcOdOeOfOgOhOiOjOkOlOmOnOoOpOqOrOsOtOuOvOwOxOyOzOAOBOCODOEOFOGOHOIOJOKOLOMONOOOPOZh)gQOROSOdbTOUO0hVOWOXO1h2h3h4hYOZO0O1O5h2O6h3O1F4O7h5O6O8h7OY ebZ 0 1 2 3 fb8O9h9O!O#O$O%O'O(O)O!h*O+O4 5 ,O-O#h.O/O:O;O=O?Ogbhb$h@O[O%h]O'h^O_O`O(h6 )h{O|O}O~OaPbPcPdPePfPgPhPiPjPkPlPmPnPoPpPqPrPsPtPuPvPwPxPyPzPAPBPCPDPEPFPGPHPIPJP'F2F3F.FKPLPMPNPOPPPQPRPl SPTPUPVPWPXPYPZP0P1P2P3P4P5P6P7P8P9P!P#P$P%P'P(P)P*P+P,P-P.P/P:P;P=P?P@P[P]P^P_P`P{P|P}P~PaQbQcQdQeQfQgQhQiQjQkQlQmQnQoQpQqQrQsQtQuQvQwQxQyQzQAQBQCQDQEQFQGQHQIQJQKQLQMQNQOQPQQQRQSQTQUQVQWQXQYQZQ0Q1Q2Q3Q4Q*h*g5Q6Q7Qib8Q9Q+h!Q#Q$Q,h-h.h/h%Q'Q(Q)Q:h*Q;h+Q4F,Q=h-Q.Q?h/Q7 jb8 9 ! # $ kb:Q@h;Q=Q?Q@Q[Q]Q^Q_Q[h`Q{Q% ' |Q}Q]h~QaRbRcRdReRlbmb^hfRgR_hhR`hiRjRkR{h( |hlRmRnRoRpRqRrRsRtRuRvRwRxRyRzRARBRCRDRERFRGRHRIRJRKRLRMRNRORPRQRRRSRTRURVRWRXRYR(F5F6F/FZR0R1R2R3R4R5R6Rm 7R8R9R!R#R$R%R'R(R)R*R+R,R-R.R/R:R;R=R?R@R[R]R^R_R`R{R|R}R~RaSbScSdSeSfSgShSiSjSkSlSmSnSoSpSqSrSsStSuSvSwSxSySzSASBSCSDSESFSGSHSISJSKSLSMSNSOSPSQSRSSSTSUSVSWSXSYSZS0S1S2S3S4S5S6S7S8S9S!S#S$S%S'S(S)S*S+S,S}h+g-S.S/Snb:S;S~h=S?S@Saibicidi[S]S^Sei_Sfi`S7F{Sgi|Shi}S) ob* + , - . pb~SiiaTbTcTdTeTfTgThTjiiTjT/ : kTlTkimTqbrblinToTmipTniqTrTsToi; pitTuTvTwTxTyTzTATBTCTDTETFTGTHTITJTKTLTMTNTOTPTQTRTSTTTUTVTWTXTYTZT0T1T2T3T4T5T6T)F8F9F:F7T8T9T!T#T$T%Tn 'T(T)T*T+T,T-T.T/T:T;T=T?T@T[T]T^T_T`T{T|T}T~TaUbUcUdUeUfUgUhUiUjUkUlUmUnUoUpUqUrUsUtUuUvUwUxUyUzUAUBUCUDUEUFUGUHUIUJUKULUMUNUOUPUQURUSUTUUUVUWUXUYUZU0U1U2U3U4U5U6U7U8U9U!U#U$U%U'U(U)U*Uqi,g+U,U-Usb.U/Uri

1082 

1083 def setup(self) -> None: 1abcdefg

1084 if self.openapi_url: 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe

1085 urls = (server_data.get("url") for server_data in self.servers) 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h gc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i Gc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj %cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk kd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl SdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm ?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten ue#g$gve/bwesbxeyezeAe

1086 server_urls = {url for url in urls if url} 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h gc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i Gc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj %cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk kd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl SdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm ?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten ue#g$gve/bwesbxeyezeAe

1087 

1088 async def openapi(req: Request) -> JSONResponse: 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h gc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i Gc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj %cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk kd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl SdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm ?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten ue#g$gve/bwesbxeyezeAe

1089 root_path = req.scope.get("root_path", "").rstrip("/") 2;F=F?Fsi-g.g/g:g@F[F]F^F;g_F=g`FPF{F?g|F}F@g~Fo = p q r s t ? aG[gbGcGdGeGfGgGhGiG]gjGkGu v lGmG^gnGoGpGqGrGsG_gtGuG`gvG{gwGxGyGw |gzGAGBGCGDGEGFGGGHGIGJGKGLGMGNGOGPGQGRGSGTGUGVGWGXGYGZG0G1G2G3G4G5G6G7G8G9G!G#G$G!FQFRF*F%G'G(G)G*G+G,G-Gh .G/G:G;G=G?G@G[G]G^G_G`G{G|G}G~GaHbHcHdHeH_UfHgHhHiHjHkHlHmHnHoHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHEHFHGHHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H:H;H=H?H@H[H]H^H_H`H{H}g%g|H}H~H@ aIbI~gcIdIeIyiahbhchdhfIgIhIiIehjIfhkISFlIghmInIhhoIx [ y z A B C ] pIihqIrIsItIuIvIwIxIjhyIzID E AIBIkhCIDIEIFIGIHIlhIIJImhKInhLIMINIF ohOIPIQIRISITIUIVIWIXIYIZI0I1I2I3I4I5I6I7I8I9I!I#I$I%I'I(I)I*I+I,I-I.I/I:I;I=I?I@I#FTFUF+F[I]I^I_I`I{I|I}Ii ~IaJbJcJdJeJfJgJhJiJjJkJlJmJnJoJpJqJrJsJtJ`UuJvJwJxJyJzJAJBJCJDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJTJUJVJWJXJYJZJ0J1J2J3J4J5J6J7J8J9J!J#J$J%J'J(J)J*J+J,J-J.J/J:J;J=J?J@J[J]J^J_J`J{J|J}J~JaKbKcKdKeKfKgKhKiKjKkKlKph'gmKnKoK^ pKqKqhrKsKtKEirhshthuhuKvKwKxKvhyKwhzKVFAKxhBKCKyhDKG _ H I J K L ` EKzhFKGKHKIKJKKKLKMKAhNKOKM N PKQKBhRKSKTKUKVKWK{ | ChXKYKDhZKEh0K1K2KFhO Gh3K4K5K6K7K8K9K!K#K$K%K'K(K)K*K+K,K-K.K/K:K;K=K?K@K[K]K^K_K`K{K|K}K~KaLbLcLdLeLfL$FWFXF,FgLhLiLjLkLlLmLnLj oLpLqLrLsLtLuLvLwLxLyLzLALBLCLDLELFLGLHLIL{UJLKLLLMLNLOLPLQLRLSLTLULVLWLXLYLZL0L1L2L3L4L5L6L7L8L9L!L#L$L%L'L(L)L*L+L,L-L.L/L:L;L=L?L@L[L]L^L_L`L{L|L}L~LaMbMcMdMeMfMgMhMiMjMkMlMmMnMoMpMqMrMsMtMuMvMwMxMyMzMAMHh(gBMCMDM} EMFMIhGMHMIMKiJhKhLhMhJMKMLMMMNhNMOhOMYFPMPhQMRMQhSMP ~ Q R S T U abTMRhUMVMWMXMYMZM0M1MSh2M3MV W 4M5MTh6M7M8M9M!M#MbbcbUh$M%MVh'MWh(M)M*MXhX Yh+M,M-M.M/M:M;M=M?M@M[M]M^M_M`M{M|M}M~MaNbNcNdNeNfNgNhNiNjNkNlNmNnNoNpNqNrNsNtNuN%FZF0F-FvNwNxNyNzNANBNCNk DNENFNGNHNINJNKNLNMNNNONPNQNRNSNTNUNVNWNXN|UYNZN0N1N2N3N4N5N6N7N8N9N!N#N$N%N'N(N)N*N+N,N-N.N/N:N;N=N?N@N[N]N^N_N`N{N|N}N~NaObOcOdOeOfOgOhOiOjOkOlOmOnOoOpOqOrOsOtOuOvOwOxOyOzOAOBOCODOEOFOGOHOIOJOKOLOMONOOOPOZh)gQOROSOdbTOUO0hVOWOXOQi1h2h3h4hYOZO0O1O5h2O6h3O1F4O7h5O6O8h7OY ebZ 0 1 2 3 fb8O9h9O!O#O$O%O'O(O)O!h*O+O4 5 ,O-O#h.O/O:O;O=O?Ogbhb$h@O[O%h]O'h^O_O`O(h6 )h{O|O}O~OaPbPcPdPePfPgPhPiPjPkPlPmPnPoPpPqPrPsPtPuPvPwPxPyPzPAPBPCPDPEPFPGPHPIPJP'F2F3F.FKPLPMPNPOPPPQPRPl SPTPUPVPWPXPYPZP0P1P2P3P4P5P6P7P8P9P!P#P$P}U%P'P(P)P*P+P,P-P.P/P:P;P=P?P@P[P]P^P_P`P{P|P}P~PaQbQcQdQeQfQgQhQiQjQkQlQmQnQoQpQqQrQsQtQuQvQwQxQyQzQAQBQCQDQEQFQGQHQIQJQKQLQMQNQOQPQQQRQSQTQUQVQWQXQYQZQ0Q1Q2Q3Q4Q*h*g5Q6Q7Qib8Q9Q+h!Q#Q$QWi,h-h.h/h%Q'Q(Q)Q:h*Q;h+Q4F,Q=h-Q.Q?h/Q7 jb8 9 ! # $ kb:Q@h;Q=Q?Q@Q[Q]Q^Q_Q[h`Q{Q% ' |Q}Q]h~QaRbRcRdReRlbmb^hfRgR_hhR`hiRjRkR{h( |hlRmRnRoRpRqRrRsRtRuRvRwRxRyRzRARBRCRDRERFRGRHRIRJRKRLRMRNRORPRQRRRSRTRURVRWRXRYR(F5F6F/FZR0R1R2R3R4R5R6Rm 7R8R9R!R#R$R%R'R(R)R*R+R,R-R.R/R:R;R=R?R@R~U[R]R^R_R`R{R|R}R~RaSbScSdSeSfSgShSiSjSkSlSmSnSoSpSqSrSsStSuSvSwSxSySzSASBSCSDSESFSGSHSISJSKSLSMSNSOSPSQSRSSSTSUSVSWSXSYSZS0S1S2S3S4S5S6S7S8S9S!S#S$S%S'S(S)S*S+S,S}h+g-S.S/Snb:S;S~h=S?S@S2iaibicidi[S]S^Sei_Sfi`S7F{Sgi|Shi}S) ob* + , - . pb~SiiaTbTcTdTeTfTgThTjiiTjT/ : kTlTkimTqbrblinToTmipTniqTrTsToi; pitTuTvTwTxTyTzTATBTCTDTETFTGTHTITJTKTLTMTNTOTPTQTRTSTTTUTVTWTXTYTZT0T1T2T3T4T5T6T)F8F9F:F7T8T9T!T#T$T%Tn 'T(T)T*T+T,T-T.T/T:T;T=T?T@T[T]T^T_T`T{TaV|T}T~TaUbUcUdUeUfUgUhUiUjUkUlUmUnUoUpUqUrUsUtUuUvUwUxUyUzUAUBUCUDUEUFUGUHUIUJUKULUMUNUOUPUQURUSUTUUUVUWUXUYUZU0U1U2U3U4U5U6U7U8U9U!U#U$U%U'U(U)U*Uqi,g+U,U-Usb.U/Uri

1090 if root_path not in server_urls: 2;F=F?Fsi-g.g/g:g@F[F]F^F;g_F=g`FPF{F?g|F}F@g~Fo = p q r s t ? aG[gbGcGdGeGfGgGhGiG]gjGkGu v lGmG^gnGoGpGqGrGsG_gtGuG`gvG{gwGxGyGw |gzGAGBGCGDGEGFGGGHGIGJGKGLGMGNGOGPGQGRGSGTGUGVGWGXGYGZG0G1G2G3G4G5G6G7G8G9G!G#G$G!FQFRF*F%G'G(G)G*G+G,G-Gh .G/G:G;G=G?G@G[G]G^G_G`G{G|G}G~GaHbHcHdHeH_UfHgHhHiHjHkHlHmHnHoHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHEHFHGHHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H:H;H=H?H@H[H]H^H_H`H{H}g%g|H}H~H@ aIbI~gcIdIeIyiahbhchdhfIgIhIiIehjIfhkISFlIghmInIhhoIx [ y z A B C ] pIihqIrIsItIuIvIwIxIjhyIzID E AIBIkhCIDIEIFIGIHIlhIIJImhKInhLIMINIF ohOIPIQIRISITIUIVIWIXIYIZI0I1I2I3I4I5I6I7I8I9I!I#I$I%I'I(I)I*I+I,I-I.I/I:I;I=I?I@I#FTFUF+F[I]I^I_I`I{I|I}Ii ~IaJbJcJdJeJfJgJhJiJjJkJlJmJnJoJpJqJrJsJtJ`UuJvJwJxJyJzJAJBJCJDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJTJUJVJWJXJYJZJ0J1J2J3J4J5J6J7J8J9J!J#J$J%J'J(J)J*J+J,J-J.J/J:J;J=J?J@J[J]J^J_J`J{J|J}J~JaKbKcKdKeKfKgKhKiKjKkKlKph'gmKnKoK^ pKqKqhrKsKtKEirhshthuhuKvKwKxKvhyKwhzKVFAKxhBKCKyhDKG _ H I J K L ` EKzhFKGKHKIKJKKKLKMKAhNKOKM N PKQKBhRKSKTKUKVKWK{ | ChXKYKDhZKEh0K1K2KFhO Gh3K4K5K6K7K8K9K!K#K$K%K'K(K)K*K+K,K-K.K/K:K;K=K?K@K[K]K^K_K`K{K|K}K~KaLbLcLdLeLfL$FWFXF,FgLhLiLjLkLlLmLnLj oLpLqLrLsLtLuLvLwLxLyLzLALBLCLDLELFLGLHLIL{UJLKLLLMLNLOLPLQLRLSLTLULVLWLXLYLZL0L1L2L3L4L5L6L7L8L9L!L#L$L%L'L(L)L*L+L,L-L.L/L:L;L=L?L@L[L]L^L_L`L{L|L}L~LaMbMcMdMeMfMgMhMiMjMkMlMmMnMoMpMqMrMsMtMuMvMwMxMyMzMAMHh(gBMCMDM} EMFMIhGMHMIMKiJhKhLhMhJMKMLMMMNhNMOhOMYFPMPhQMRMQhSMP ~ Q R S T U abTMRhUMVMWMXMYMZM0M1MSh2M3MV W 4M5MTh6M7M8M9M!M#MbbcbUh$M%MVh'MWh(M)M*MXhX Yh+M,M-M.M/M:M;M=M?M@M[M]M^M_M`M{M|M}M~MaNbNcNdNeNfNgNhNiNjNkNlNmNnNoNpNqNrNsNtNuN%FZF0F-FvNwNxNyNzNANBNCNk DNENFNGNHNINJNKNLNMNNNONPNQNRNSNTNUNVNWNXN|UYNZN0N1N2N3N4N5N6N7N8N9N!N#N$N%N'N(N)N*N+N,N-N.N/N:N;N=N?N@N[N]N^N_N`N{N|N}N~NaObOcOdOeOfOgOhOiOjOkOlOmOnOoOpOqOrOsOtOuOvOwOxOyOzOAOBOCODOEOFOGOHOIOJOKOLOMONOOOPOZh)gQOROSOdbTOUO0hVOWOXOQi1h2h3h4hYOZO0O1O5h2O6h3O1F4O7h5O6O8h7OY ebZ 0 1 2 3 fb8O9h9O!O#O$O%O'O(O)O!h*O+O4 5 ,O-O#h.O/O:O;O=O?Ogbhb$h@O[O%h]O'h^O_O`O(h6 )h{O|O}O~OaPbPcPdPePfPgPhPiPjPkPlPmPnPoPpPqPrPsPtPuPvPwPxPyPzPAPBPCPDPEPFPGPHPIPJP'F2F3F.FKPLPMPNPOPPPQPRPl SPTPUPVPWPXPYPZP0P1P2P3P4P5P6P7P8P9P!P#P$P}U%P'P(P)P*P+P,P-P.P/P:P;P=P?P@P[P]P^P_P`P{P|P}P~PaQbQcQdQeQfQgQhQiQjQkQlQmQnQoQpQqQrQsQtQuQvQwQxQyQzQAQBQCQDQEQFQGQHQIQJQKQLQMQNQOQPQQQRQSQTQUQVQWQXQYQZQ0Q1Q2Q3Q4Q*h*g5Q6Q7Qib8Q9Q+h!Q#Q$QWi,h-h.h/h%Q'Q(Q)Q:h*Q;h+Q4F,Q=h-Q.Q?h/Q7 jb8 9 ! # $ kb:Q@h;Q=Q?Q@Q[Q]Q^Q_Q[h`Q{Q% ' |Q}Q]h~QaRbRcRdReRlbmb^hfRgR_hhR`hiRjRkR{h( |hlRmRnRoRpRqRrRsRtRuRvRwRxRyRzRARBRCRDRERFRGRHRIRJRKRLRMRNRORPRQRRRSRTRURVRWRXRYR(F5F6F/FZR0R1R2R3R4R5R6Rm 7R8R9R!R#R$R%R'R(R)R*R+R,R-R.R/R:R;R=R?R@R~U[R]R^R_R`R{R|R}R~RaSbScSdSeSfSgShSiSjSkSlSmSnSoSpSqSrSsStSuSvSwSxSySzSASBSCSDSESFSGSHSISJSKSLSMSNSOSPSQSRSSSTSUSVSWSXSYSZS0S1S2S3S4S5S6S7S8S9S!S#S$S%S'S(S)S*S+S,S}h+g-S.S/Snb:S;S~h=S?S@S2iaibicidi[S]S^Sei_Sfi`S7F{Sgi|Shi}S) ob* + , - . pb~SiiaTbTcTdTeTfTgThTjiiTjT/ : kTlTkimTqbrblinToTmipTniqTrTsToi; pitTuTvTwTxTyTzTATBTCTDTETFTGTHTITJTKTLTMTNTOTPTQTRTSTTTUTVTWTXTYTZT0T1T2T3T4T5T6T)F8F9F:F7T8T9T!T#T$T%Tn 'T(T)T*T+T,T-T.T/T:T;T=T?T@T[T]T^T_T`T{TaV|T}T~TaUbUcUdUeUfUgUhUiUjUkUlUmUnUoUpUqUrUsUtUuUvUwUxUyUzUAUBUCUDUEUFUGUHUIUJUKULUMUNUOUPUQURUSUTUUUVUWUXUYUZU0U1U2U3U4U5U6U7U8U9U!U#U$U%U'U(U)U*Uqi,g+U,U-Usb.U/Uri

1091 if root_path and self.root_path_in_servers: 2;F=F?Fsi-g.g/g:g@F[F]F^F;g_F=g`FPF{F?g|F}F@g~Fo = p q r s t ? aG[gbGcGdGeGfGgGhGiG]gjGkGu v lGmG^gnGoGpGqGrGsG_gtGuG`gvG{gwGxGyGw |gzGAGBGCGDGEGFGGGHGIGJGKGLGMGNGOGPGQGRGSGTGUGVGWGXGYGZG0G1G2G3G4G5G6G7G8G9G!G#G$G!FQFRF*F%G'G(G)G*G+G,G-Gh .G/G:G;G=G?G@G[G]G^G_G`G{G|G}G~GaHbHcHdHeH_UfHgHhHiHjHkHlHmHnHoHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHEHFHGHHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H:H;H=H?H@H[H]H^H_H`H{H}g%g|H}H~H@ aIbI~gcIdIeIyiahbhchdhfIgIhIiIehjIfhkISFlIghmInIhhoIx [ y z A B C ] pIihqIrIsItIuIvIwIxIjhyIzID E AIBIkhCIDIEIFIGIHIlhIIJImhKInhLIMINIF ohOIPIQIRISITIUIVIWIXIYIZI0I1I2I3I4I5I6I7I8I9I!I#I$I%I'I(I)I*I+I,I-I.I/I:I;I=I?I@I#FTFUF+F[I]I^I_I`I{I|I}Ii ~IaJbJcJdJeJfJgJhJiJjJkJlJmJnJoJpJqJrJsJtJ`UuJvJwJxJyJzJAJBJCJDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJTJUJVJWJXJYJZJ0J1J2J3J4J5J6J7J8J9J!J#J$J%J'J(J)J*J+J,J-J.J/J:J;J=J?J@J[J]J^J_J`J{J|J}J~JaKbKcKdKeKfKgKhKiKjKkKlKph'gmKnKoK^ pKqKqhrKsKtKEirhshthuhuKvKwKxKvhyKwhzKVFAKxhBKCKyhDKG _ H I J K L ` EKzhFKGKHKIKJKKKLKMKAhNKOKM N PKQKBhRKSKTKUKVKWK{ | ChXKYKDhZKEh0K1K2KFhO Gh3K4K5K6K7K8K9K!K#K$K%K'K(K)K*K+K,K-K.K/K:K;K=K?K@K[K]K^K_K`K{K|K}K~KaLbLcLdLeLfL$FWFXF,FgLhLiLjLkLlLmLnLj oLpLqLrLsLtLuLvLwLxLyLzLALBLCLDLELFLGLHLIL{UJLKLLLMLNLOLPLQLRLSLTLULVLWLXLYLZL0L1L2L3L4L5L6L7L8L9L!L#L$L%L'L(L)L*L+L,L-L.L/L:L;L=L?L@L[L]L^L_L`L{L|L}L~LaMbMcMdMeMfMgMhMiMjMkMlMmMnMoMpMqMrMsMtMuMvMwMxMyMzMAMHh(gBMCMDM} EMFMIhGMHMIMKiJhKhLhMhJMKMLMMMNhNMOhOMYFPMPhQMRMQhSMP ~ Q R S T U abTMRhUMVMWMXMYMZM0M1MSh2M3MV W 4M5MTh6M7M8M9M!M#MbbcbUh$M%MVh'MWh(M)M*MXhX Yh+M,M-M.M/M:M;M=M?M@M[M]M^M_M`M{M|M}M~MaNbNcNdNeNfNgNhNiNjNkNlNmNnNoNpNqNrNsNtNuN%FZF0F-FvNwNxNyNzNANBNCNk DNENFNGNHNINJNKNLNMNNNONPNQNRNSNTNUNVNWNXN|UYNZN0N1N2N3N4N5N6N7N8N9N!N#N$N%N'N(N)N*N+N,N-N.N/N:N;N=N?N@N[N]N^N_N`N{N|N}N~NaObOcOdOeOfOgOhOiOjOkOlOmOnOoOpOqOrOsOtOuOvOwOxOyOzOAOBOCODOEOFOGOHOIOJOKOLOMONOOOPOZh)gQOROSOdbTOUO0hVOWOXOQi1h2h3h4hYOZO0O1O5h2O6h3O1F4O7h5O6O8h7OY ebZ 0 1 2 3 fb8O9h9O!O#O$O%O'O(O)O!h*O+O4 5 ,O-O#h.O/O:O;O=O?Ogbhb$h@O[O%h]O'h^O_O`O(h6 )h{O|O}O~OaPbPcPdPePfPgPhPiPjPkPlPmPnPoPpPqPrPsPtPuPvPwPxPyPzPAPBPCPDPEPFPGPHPIPJP'F2F3F.FKPLPMPNPOPPPQPRPl SPTPUPVPWPXPYPZP0P1P2P3P4P5P6P7P8P9P!P#P$P}U%P'P(P)P*P+P,P-P.P/P:P;P=P?P@P[P]P^P_P`P{P|P}P~PaQbQcQdQeQfQgQhQiQjQkQlQmQnQoQpQqQrQsQtQuQvQwQxQyQzQAQBQCQDQEQFQGQHQIQJQKQLQMQNQOQPQQQRQSQTQUQVQWQXQYQZQ0Q1Q2Q3Q4Q*h*g5Q6Q7Qib8Q9Q+h!Q#Q$QWi,h-h.h/h%Q'Q(Q)Q:h*Q;h+Q4F,Q=h-Q.Q?h/Q7 jb8 9 ! # $ kb:Q@h;Q=Q?Q@Q[Q]Q^Q_Q[h`Q{Q% ' |Q}Q]h~QaRbRcRdReRlbmb^hfRgR_hhR`hiRjRkR{h( |hlRmRnRoRpRqRrRsRtRuRvRwRxRyRzRARBRCRDRERFRGRHRIRJRKRLRMRNRORPRQRRRSRTRURVRWRXRYR(F5F6F/FZR0R1R2R3R4R5R6Rm 7R8R9R!R#R$R%R'R(R)R*R+R,R-R.R/R:R;R=R?R@R~U[R]R^R_R`R{R|R}R~RaSbScSdSeSfSgShSiSjSkSlSmSnSoSpSqSrSsStSuSvSwSxSySzSASBSCSDSESFSGSHSISJSKSLSMSNSOSPSQSRSSSTSUSVSWSXSYSZS0S1S2S3S4S5S6S7S8S9S!S#S$S%S'S(S)S*S+S,S}h+g-S.S/Snb:S;S~h=S?S@S2iaibicidi[S]S^Sei_Sfi`S7F{Sgi|Shi}S) ob* + , - . pb~SiiaTbTcTdTeTfTgThTjiiTjT/ : kTlTkimTqbrblinToTmipTniqTrTsToi; pitTuTvTwTxTyTzTATBTCTDTETFTGTHTITJTKTLTMTNTOTPTQTRTSTTTUTVTWTXTYTZT0T1T2T3T4T5T6T)F8F9F:F7T8T9T!T#T$T%Tn 'T(T)T*T+T,T-T.T/T:T;T=T?T@T[T]T^T_T`T{TaV|T}T~TaUbUcUdUeUfUgUhUiUjUkUlUmUnUoUpUqUrUsUtUuUvUwUxUyUzUAUBUCUDUEUFUGUHUIUJUKULUMUNUOUPUQURUSUTUUUVUWUXUYUZU0U1U2U3U4U5U6U7U8U9U!U#U$U%U'U(U)U*Uqi,g+U,U-Usb.U/Uri

1092 self.servers.insert(0, {"url": root_path}) 2PF!FQFRF%gSF#FTFUF'gVF$FWFXF(gYF%FZF0F)g1F'F2F3F*g4F(F5F6F+g7F)F8F9F,g

1093 server_urls.add(root_path) 2PF!FQFRF%gSF#FTFUF'gVF$FWFXF(gYF%FZF0F)g1F'F2F3F*g4F(F5F6F+g7F)F8F9F,g

1094 return JSONResponse(self.openapi()) 2;F=F?Fsi-g.g/g:g@F[F]F^F;g_F=g`FPF{F?g|F}F@g~Fo = p q r s t ? aG[gbGcGdGeGfGgGhGiG]gjGkGu v lGmG^gnGoGpGqGrGsG_gtGuG`gvG{gwGxGyGw |gzGAGBGCGDGEGFGGGHGIGJGKGLGMGNGOGPGQGRGSGTGUGVGWGXGYGZG0G1G2G3G4G5G6G7G8G9G!G#G$G!FQFRF*F%G'G(G)G*G+G,G-Gh .G/G:G;G=G?G@G[G]G^G_G`G{G|G}G~GaHbHcHdHeH_UfHgHhHiHjHkHlHmHnHoHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHEHFHGHHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H:H;H=H?H@H[H]H^H_H`H{H}g%g|H}H~H@ aIbI~gcIdIeIyiahbhchdhfIgIhIiIehjIfhkISFlIghmInIhhoIx [ y z A B C ] pIihqIrIsItIuIvIwIxIjhyIzID E AIBIkhCIDIEIFIGIHIlhIIJImhKInhLIMINIF ohOIPIQIRISITIUIVIWIXIYIZI0I1I2I3I4I5I6I7I8I9I!I#I$I%I'I(I)I*I+I,I-I.I/I:I;I=I?I@I#FTFUF+F[I]I^I_I`I{I|I}Ii ~IaJbJcJdJeJfJgJhJiJjJkJlJmJnJoJpJqJrJsJtJ`UuJvJwJxJyJzJAJBJCJDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJTJUJVJWJXJYJZJ0J1J2J3J4J5J6J7J8J9J!J#J$J%J'J(J)J*J+J,J-J.J/J:J;J=J?J@J[J]J^J_J`J{J|J}J~JaKbKcKdKeKfKgKhKiKjKkKlKph'gmKnKoK^ pKqKqhrKsKtKEirhshthuhuKvKwKxKvhyKwhzKVFAKxhBKCKyhDKG _ H I J K L ` EKzhFKGKHKIKJKKKLKMKAhNKOKM N PKQKBhRKSKTKUKVKWK{ | ChXKYKDhZKEh0K1K2KFhO Gh3K4K5K6K7K8K9K!K#K$K%K'K(K)K*K+K,K-K.K/K:K;K=K?K@K[K]K^K_K`K{K|K}K~KaLbLcLdLeLfL$FWFXF,FgLhLiLjLkLlLmLnLj oLpLqLrLsLtLuLvLwLxLyLzLALBLCLDLELFLGLHLIL{UJLKLLLMLNLOLPLQLRLSLTLULVLWLXLYLZL0L1L2L3L4L5L6L7L8L9L!L#L$L%L'L(L)L*L+L,L-L.L/L:L;L=L?L@L[L]L^L_L`L{L|L}L~LaMbMcMdMeMfMgMhMiMjMkMlMmMnMoMpMqMrMsMtMuMvMwMxMyMzMAMHh(gBMCMDM} EMFMIhGMHMIMKiJhKhLhMhJMKMLMMMNhNMOhOMYFPMPhQMRMQhSMP ~ Q R S T U abTMRhUMVMWMXMYMZM0M1MSh2M3MV W 4M5MTh6M7M8M9M!M#MbbcbUh$M%MVh'MWh(M)M*MXhX Yh+M,M-M.M/M:M;M=M?M@M[M]M^M_M`M{M|M}M~MaNbNcNdNeNfNgNhNiNjNkNlNmNnNoNpNqNrNsNtNuN%FZF0F-FvNwNxNyNzNANBNCNk DNENFNGNHNINJNKNLNMNNNONPNQNRNSNTNUNVNWNXN|UYNZN0N1N2N3N4N5N6N7N8N9N!N#N$N%N'N(N)N*N+N,N-N.N/N:N;N=N?N@N[N]N^N_N`N{N|N}N~NaObOcOdOeOfOgOhOiOjOkOlOmOnOoOpOqOrOsOtOuOvOwOxOyOzOAOBOCODOEOFOGOHOIOJOKOLOMONOOOPOZh)gQOROSOdbTOUO0hVOWOXOQi1h2h3h4hYOZO0O1O5h2O6h3O1F4O7h5O6O8h7OY ebZ 0 1 2 3 fb8O9h9O!O#O$O%O'O(O)O!h*O+O4 5 ,O-O#h.O/O:O;O=O?Ogbhb$h@O[O%h]O'h^O_O`O(h6 )h{O|O}O~OaPbPcPdPePfPgPhPiPjPkPlPmPnPoPpPqPrPsPtPuPvPwPxPyPzPAPBPCPDPEPFPGPHPIPJP'F2F3F.FKPLPMPNPOPPPQPRPl SPTPUPVPWPXPYPZP0P1P2P3P4P5P6P7P8P9P!P#P$P}U%P'P(P)P*P+P,P-P.P/P:P;P=P?P@P[P]P^P_P`P{P|P}P~PaQbQcQdQeQfQgQhQiQjQkQlQmQnQoQpQqQrQsQtQuQvQwQxQyQzQAQBQCQDQEQFQGQHQIQJQKQLQMQNQOQPQQQRQSQTQUQVQWQXQYQZQ0Q1Q2Q3Q4Q*h*g5Q6Q7Qib8Q9Q+h!Q#Q$QWi,h-h.h/h%Q'Q(Q)Q:h*Q;h+Q4F,Q=h-Q.Q?h/Q7 jb8 9 ! # $ kb:Q@h;Q=Q?Q@Q[Q]Q^Q_Q[h`Q{Q% ' |Q}Q]h~QaRbRcRdReRlbmb^hfRgR_hhR`hiRjRkR{h( |hlRmRnRoRpRqRrRsRtRuRvRwRxRyRzRARBRCRDRERFRGRHRIRJRKRLRMRNRORPRQRRRSRTRURVRWRXRYR(F5F6F/FZR0R1R2R3R4R5R6Rm 7R8R9R!R#R$R%R'R(R)R*R+R,R-R.R/R:R;R=R?R@R~U[R]R^R_R`R{R|R}R~RaSbScSdSeSfSgShSiSjSkSlSmSnSoSpSqSrSsStSuSvSwSxSySzSASBSCSDSESFSGSHSISJSKSLSMSNSOSPSQSRSSSTSUSVSWSXSYSZS0S1S2S3S4S5S6S7S8S9S!S#S$S%S'S(S)S*S+S,S}h+g-S.S/Snb:S;S~h=S?S@S2iaibicidi[S]S^Sei_Sfi`S7F{Sgi|Shi}S) ob* + , - . pb~SiiaTbTcTdTeTfTgThTjiiTjT/ : kTlTkimTqbrblinToTmipTniqTrTsToi; pitTuTvTwTxTyTzTATBTCTDTETFTGTHTITJTKTLTMTNTOTPTQTRTSTTTUTVTWTXTYTZT0T1T2T3T4T5T6T)F8F9F:F7T8T9T!T#T$T%Tn 'T(T)T*T+T,T-T.T/T:T;T=T?T@T[T]T^T_T`T{TaV|T}T~TaUbUcUdUeUfUgUhUiUjUkUlUmUnUoUpUqUrUsUtUuUvUwUxUyUzUAUBUCUDUEUFUGUHUIUJUKULUMUNUOUPUQURUSUTUUUVUWUXUYUZU0U1U2U3U4U5U6U7U8U9U!U#U$U%U'U(U)U*Uqi,g+U,U-Usb.U/Uri

1095 

1096 self.add_route(self.openapi_url, openapi, include_in_schema=False) 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h gc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i Gc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj %cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk kd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl SdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm ?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten ue#g$gve/bwesbxeyezeAe

1097 if self.openapi_url and self.docs_url: 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe

1098 

1099 async def swagger_ui_html(req: Request) -> HTMLResponse: 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h gc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i Gc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj %cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk kd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl SdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm ?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten ue#g$gve/bwesbxeyezeAe

1100 root_path = req.scope.get("root_path", "").rstrip("/") 2:Uti8iuih viwixi;Uzi9iAii BiCiDi=UFi!iGij HiIiJi?ULi#iMik NiOiPi@URi$iSil TiUiVi[UXi%iYim Zi0i1i]U3i'i4in 5i6i7i

1101 openapi_url = root_path + self.openapi_url 2:Uti8iuih viwixi;Uzi9iAii BiCiDi=UFi!iGij HiIiJi?ULi#iMik NiOiPi@URi$iSil TiUiVi[UXi%iYim Zi0i1i]U3i'i4in 5i6i7i

1102 oauth2_redirect_url = self.swagger_ui_oauth2_redirect_url 2:Uti8iuih viwixi;Uzi9iAii BiCiDi=UFi!iGij HiIiJi?ULi#iMik NiOiPi@URi$iSil TiUiVi[UXi%iYim Zi0i1i]U3i'i4in 5i6i7i

1103 if oauth2_redirect_url: 2:Uti8iuih viwixi;Uzi9iAii BiCiDi=UFi!iGij HiIiJi?ULi#iMik NiOiPi@URi$iSil TiUiVi[UXi%iYim Zi0i1i]U3i'i4in 5i6i7i

1104 oauth2_redirect_url = root_path + oauth2_redirect_url 2:Utiuih viwixi;UziAii BiCiDi=UFiGij HiIiJi?ULiMik NiOiPi@URiSil TiUiVi[UXiYim Zi0i1i]U3i4in 5i6i7i

1105 return get_swagger_ui_html( 2:Uti8iuih viwixi;Uzi9iAii BiCiDi=UFi!iGij HiIiJi?ULi#iMik NiOiPi@URi$iSil TiUiVi[UXi%iYim Zi0i1i]U3i'i4in 5i6i7i

1106 openapi_url=openapi_url, 

1107 title=f"{self.title} - Swagger UI", 

1108 oauth2_redirect_url=oauth2_redirect_url, 

1109 init_oauth=self.swagger_ui_init_oauth, 

1110 swagger_ui_parameters=self.swagger_ui_parameters, 

1111 ) 

1112 

1113 self.add_route(self.docs_url, swagger_ui_html, include_in_schema=False) 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h gc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i Gc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj %cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk kd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl SdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm ?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten ue#g$gve/bwesbxeyezeAe

1114 

1115 if self.swagger_ui_oauth2_redirect_url: 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h gc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i Gc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj %cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk kd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl SdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm ?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten ue#g$gve/bwesbxeyezeAe

1116 

1117 async def swagger_ui_redirect(req: Request) -> HTMLResponse: 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h gc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i Gc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj %cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk kd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl SdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm ?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten ue#g$gve/bwesbxeyezeAe

1118 return get_swagger_ui_oauth2_redirect_html() 2pVqVrVsVtVuVvVwVxVyVzVAVBVCV

1119 

1120 self.add_route( 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h gc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i Gc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj %cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk kd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl SdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm ?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten ue#g$gve/bwesbxeyezeAe

1121 self.swagger_ui_oauth2_redirect_url, 

1122 swagger_ui_redirect, 

1123 include_in_schema=False, 

1124 ) 

1125 if self.openapi_url and self.redoc_url: 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h 3egc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i |eGc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj Cf%cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk 7fkd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl bgSdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm Gg?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten !gue#g$gve/bwesbxeyezeAe

1126 

1127 async def redoc_html(req: Request) -> HTMLResponse: 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h gc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i Gc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj %cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk kd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl SdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm ?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten ue#g$gve/bwesbxeyezeAe

1128 root_path = req.scope.get("root_path", "").rstrip("/") 2bVh cVi dVj eVk fVl gVm hVn

1129 openapi_url = root_path + self.openapi_url 2bVh cVi dVj eVk fVl gVm hVn

1130 return get_redoc_html( 2bVh cVi dVj eVk fVl gVm hVn

1131 openapi_url=openapi_url, title=f"{self.title} - ReDoc" 

1132 ) 

1133 

1134 self.add_route(self.redoc_url, redoc_html, include_in_schema=False) 2a :b;b=b?b@b[b]b^b_bo = p q r s t ? `b{bBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bXeYeZe0e1e2e~bacbccctbEbdcecfcFbw h gc4e5ehcGb@ icjckclcb mcncocpcqcrcsctcucx [ y z A B C ] vcwc6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@eHbIbJbD E Kbxcyc[e]e^e_e`e{ezcAcBcCcubLbDcEcFcMbF i Gc}e~eHcNb^ IcJcKcLcc McNcOcPcQcRcScTcUcG _ H I J K L ` VcWcafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1c| 2c3c4cwfxfyfzfAfBf5c6c7c8cvbSb9c!c#cTbO $cj %cDfEf'cUb(c} )c*c+c,cd -c.c/c:c;c=c?c@c[cP ~ Q R S T U ab]c^cFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}ccb~cadbd1f2f3f4f5f6fcdddedfdwbZbgdhdid0bX jdk kd8f9fld1bmddbndodpdqde rdsdtdudvdwdxdydzdY ebZ 0 1 2 3 fbAdBd!f#f$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGdhbHdIdJd`f{f|f}f~fagKdLdMdNdxb6bOdPdQd7b6 Rdl SdcgdgTd8bUdibVdWdXdYdf Zd0d1d2d3d4d5d6d7d7 jb8 9 ! # $ kb8d9degfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'dmb(d)d*dAgBgCgDgEgFg+d,d-d.dyb%b/d:d;d'b( =dm ?dHgIg@d(b[dnb]d^d_d`dg {d|d}d~daebecede) ob* + , - . pbeeJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheierbjekele5g6g7g8g9gmeneoepezb-bqerese.b; ten ue#g$gve/bwesbxeyezeAe

1135 

1136 async def __call__(self, scope: Scope, receive: Receive, send: Send) -> None: 1abcdefg

1137 if self.root_path: 3a uj vj wj DV xj yj zj ;F Aj EV =F ?F Bj si -g .g /g :g Cj FV GV HV @F IV JV KV Dj (i Ej :b ;b [F LV Fj ]F bV :U pV Gj =b ?b MV NV OV PV QV RV SV TV UV VV WV XV YV ZV 0V 1V 2V 3V ^F 4V 5V Hj 6V 7V 8V 9V !V #V $V %V 'V Ij ;g Jj (V Kj _F =g )V *V ti qV @b [b ]b Lj +V ,V -V .V /V :V ;V =V ?V @V [V ]V ^V Mj _V `V {V |V }V ~V aW bW cW dW eW fW gW hW iW jW Nj kW lW mW nW Oj oW pW Pj qW Qj rW sW tW Rj uW vW wW Sj xW yW zW AW BW CW DW EW FW GW HW IW JW KW LW MW NW OW Tj PW QW Uj `F RW SW TW UW Vj VW WW XW YW ZW 0W 1W 2W 3W 4W 5W 6W 7W 8W 9W !W #W $W %W 'W (W Wj )W *W Xj Yj +W ,W Zj 0j -W ^b _b 1j .W /W :W ;W =W ?W @W 2j [W ]W ^W _W `W )i PF 3j {F 4j {W |W ?g *i }W ~W aX bX cX 5j dX eX |F fX gX hX 6j iX 7j }F jX 8j @g 9j kX !j #j lX mX nX oX pX qX rX $j ~F %j o = p q r s t ? 'j aG [g (j bG )j sX *j tX +j cG uX vX wX xX yX zX AX ,j BX CX dG `b {b eG -j DX EX fG .j FX /j GX gG :j hG HX 8i IX ;j iG ]g =j jG ?j kG Ab Bb Cb u v Db @j lG [j JX ]j KX ^j mG _j LX MX NX OX ^g PX QX RX SX TX UX VX WX XX YX ZX 0X 1X 2X 3X 4X 5X 6X 7X 8X 9X !X #X $X %X 'X (X )X *X +X ,X -X .X /X :X ;X =X ?X @X [X ]X ^X _X `X {X |X }X ~X aY bY cY dY eY fY gY hY iY jY kY lY mY nY oY pY qY rY sY tY uY vY wY xY yY zY AY nG `j BY CY DY EY FY GY HY {j IY JY oG KY |j LY MY NY OY PY QY RY SY TY UY VY pG WY XY qG YY ZY 0Y 1Y 2Y 3Y }j 4Y 5Y 6Y 7Y 8Y 9Y !Y #Y $Y %Y 'Y (Y )Y *Y +Y ,Y rG ~j -Y .Y /Y :Y ;Y =Y ?Y @Y [Y ]Y ^Y sG _Y `Y {Y |Y ak }Y ~Y aZ bZ cZ dZ eZ fZ gZ hZ iZ jZ kZ lZ mZ nZ oZ pZ qZ rZ sZ tZ uZ vZ wZ xZ yZ zZ AZ BZ CZ DZ EZ FZ GZ HZ IZ JZ KZ LZ MZ NZ OZ PZ QZ bk RZ |b }b ck SZ _g dk tG ek uG `g TZ UZ VZ WZ fk XZ YZ ZZ 0Z 1Z gk 2Z 3Z vG hk 4Z 5Z 6Z 7Z 8Z 9Z !Z #Z ik {g jk wG $Z %Z 'Z (Z )Z *Z +Z ,Z -Z .Z /Z :Z ;Z kk xG =Z ?Z @Z [Z ]Z ^Z _Z `Z {Z |Z }Z ~Z a0 b0 c0 d0 e0 f0 g0 h0 i0 j0 k0 lk l0 m0 mk n0 nk o0 p0 q0 r0 s0 ok t0 yG pk ~b qk u0 v0 w0 x0 ac bc cc tb Eb dc rk ec fc Fb w sk |g zG tk y0 AG uk z0 BG vk A0 CG wk B0 DG xk C0 EG yk D0 FG zk E0 GG Ak F0 HG Bk G0 IG Ck H0 JG Dk I0 KG Ek J0 LG Fk K0 L0 M0 MG Gk N0 O0 P0 NG Hk Q0 R0 S0 OG Ik T0 U0 PG Jk V0 W0 QG Kk X0 Y0 RG Lk Z0 00 SG Mk 10 20 TG Nk 30 40 UG Ok 50 60 70 80 90 !0 #0 Pk VG $0 %0 Qk WG '0 XG Rk (0 )0 *0 +0 ,0 -0 YG Sk .0 /0 :0 ;0 =0 ?0 @0 Tk ZG [0 ]0 Uk 0G ^0 1G Vk _0 `0 2G Wk {0 |0 3G Xk }0 ~0 Yk Zk 0k a1 1k b1 c1 d1 e1 f1 g1 2k h1 i1 j1 3k k1 l1 m1 n1 o1 4k p1 q1 r1 s1 5k t1 u1 v1 w1 x1 4G y1 6k z1 A1 7k 5G B1 ui 8k C1 6G D1 9k 7G E1 F1 G1 H1 8G !k I1 9G #k J1 !G $k K1 #G %k L1 M1 'k (k )k *k N1 +k O1 $G ,k -k .k !F P1 /k +i QF ,i RF -i *F Q1 R1 S1 T1 U1 V1 W1 X1 Y1 Z1 01 %G 11 21 31 41 51 61 71 81 91 !1 :k #1 $1 ;k %1 '1 (1 'G )1 *1 +1 ,1 -1 .1 /1 :1 ;1 =1 ?1 @1 =k [1 (G )G ?k ]1 ^1 _1 *G `1 {1 @k +G [k |1 ]k ,G -G }1 h 3e gc ~1 vi a2 wi b2 xi ^k c2 d2 e2 .G _k f2 g2 h2 /G `k :G {k i2 j2 k2 l2 m2 n2 o2 p2 |k q2 }k r2 ~k s2 al ;G bl =G cl ?G dl @G el [G ]G fl ^G gl hl il jl kl ll _G t2 ml nl `G u2 {G |G ol pl }G ql ~G v2 w2 rl x2 aH y2 sl z2 A2 B2 tl C2 D2 ul E2 F2 vl G2 H2 I2 J2 wl K2 L2 M2 bH xl cH yl dH zl eH Al _U Bl fH Cl N2 gH Dl hH El iH Fl jH O2 kH Gl P2 Hl Q2 lH Il R2 mH Jl S2 nH T2 U2 Kl oH pH V2 Ll W2 X2 Ml qH Nl Y2 Z2 02 rH Ol 12 22 32 sH Pl 42 52 62 72 tH Ql uH Rl vH Sl wH Tl xH Ul yH zH Vl Wl AH Xl BH Yl CH Zl DH 0l EH FH GH 1l 2l HH IH 3l JH 4l 82 92 KH 5l !2 #2 6l $2 LH MH NH 7l OH 8l 9l PH %2 !l '2 (2 )2 QH #l RH $l SH %l TH UH 'l *2 +2 ,2 VH (l -2 .2 /2 )l :2 WH *l ;2 XH YH =2 ?2 +l @2 ,l ZH [2 -l ]2 0H .l 1H ^2 /l _2 2H `2 {2 |2 :l 3H 4H }2 ~2 ;l a3 b3 5H c3 =l d3 e3 6H ?l f3 g3 7H h3 i3 @l j3 k3 8H [l l3 9H ]l m3 n3 o3 p3 !H q3 ^l r3 s3 t3 u3 #H v3 _l w3 x3 y3 z3 $H `l A3 B3 C3 D3 %H E3 F3 G3 {l H3 |l }l ~l am bm 'H cm (H dm em I3 )H fm *H gm J3 +H hm ,H -H im K3 .H jm L3 /H km :H lm ;H mm =H nm M3 om ?H N3 O3 P3 Q3 pm R3 S3 T3 @H U3 V3 W3 qm X3 Y3 Z3 [H 03 13 23 33 43 53 63 73 83 ]H rm 93 !3 #3 sm ^H $3 tm _H %3 um vm '3 `H (3 {H )3 }g %g *3 hc +3 |H wm ,3 }H -3 .3 Gb /3 :3 xm ;3 =3 ?3 @3 [3 ym ]3 zm ^3 _3 `3 {3 |3 Am }3 ~3 Bm ~H a4 Cm @ b4 c4 aI d4 Dm bI Em e4 f4 Fm g4 h4 i4 j4 k4 Gm l4 Hm ~g ic Im m4 n4 Jm jc kc lc o4 p4 q4 r4 s4 t4 u4 v4 b Km Lm Mm w4 Nm Om Pm cI Qm x4 dI eI Rm yi ah bh ch dh Sm y4 z4 A4 fI B4 C4 D4 Tm .i Um mc nc gI E4 Vm hI cV ;U rV Wm oc pc F4 G4 H4 I4 J4 K4 L4 M4 N4 O4 P4 Q4 R4 S4 T4 U4 V4 W4 iI X4 Y4 Xm Z4 04 14 24 34 44 54 64 74 Ym eh Zm 84 0m jI fh 94 !4 zi sV qc rc sc 1m #4 $4 %4 '4 (4 )4 *4 +4 ,4 -4 .4 /4 :4 2m ;4 =4 ?4 @4 [4 ]4 ^4 _4 `4 {4 |4 }4 ~4 a5 b5 c5 3m d5 e5 f5 g5 4m h5 i5 5m j5 6m k5 l5 m5 7m n5 o5 p5 8m q5 r5 s5 t5 u5 v5 w5 x5 y5 z5 A5 B5 C5 D5 E5 F5 G5 H5 9m I5 J5 !m kI K5 L5 M5 N5 #m O5 P5 Q5 R5 S5 T5 U5 V5 W5 X5 Y5 Z5 05 15 25 35 45 55 65 75 85 $m 95 !5 %m 'm #5 $5 (m )m %5 tc uc *m '5 (5 )5 *5 +5 ,5 -5 +m .5 /5 :5 ;5 =5 /i SF ,m lI -m ?5 @5 gh :i [5 ]5 ^5 _5 `5 .m {5 |5 mI }5 ~5 a6 /m b6 :m nI c6 ;m hh =m d6 ?m @m e6 f6 g6 h6 i6 j6 k6 [m oI ]m x [ y z A B C ] ^m pI ih _m qI `m l6 {m m6 |m rI n6 o6 p6 q6 r6 s6 t6 }m u6 v6 sI vc wc tI ~m w6 x6 uI an y6 bn z6 vI cn wI A6 9i B6 dn xI jh en yI fn zI Hb Ib Jb D E Kb gn AI hn C6 in D6 jn BI kn E6 F6 G6 H6 kh I6 J6 K6 L6 M6 N6 O6 P6 Q6 R6 S6 T6 U6 V6 W6 X6 Y6 Z6 06 16 26 36 46 56 66 76 86 96 !6 #6 $6 %6 '6 (6 )6 *6 +6 ,6 -6 .6 /6 :6 ;6 =6 ?6 @6 [6 ]6 ^6 _6 `6 {6 |6 }6 ~6 a7 b7 c7 d7 e7 f7 g7 h7 i7 j7 k7 l7 m7 n7 o7 p7 q7 r7 s7 t7 CI ln u7 v7 w7 x7 y7 z7 A7 mn B7 C7 DI D7 nn E7 F7 G7 H7 I7 J7 K7 L7 M7 N7 O7 EI P7 Q7 FI R7 S7 T7 U7 V7 W7 on X7 Y7 Z7 07 17 27 37 47 57 67 77 87 97 !7 #7 $7 GI pn %7 '7 (7 )7 *7 +7 ,7 -7 .7 /7 :7 HI ;7 =7 ?7 @7 qn [7 ]7 ^7 _7 `7 {7 |7 }7 ~7 a8 b8 c8 d8 e8 f8 g8 h8 i8 j8 k8 l8 m8 n8 o8 p8 q8 r8 s8 t8 u8 v8 w8 x8 y8 z8 A8 B8 C8 D8 E8 F8 G8 H8 I8 J8 rn K8 xc yc sn L8 lh tn II un JI mh M8 N8 O8 P8 vn Q8 R8 S8 T8 U8 wn V8 W8 KI xn X8 Y8 Z8 08 18 28 38 48 yn nh zn LI 58 68 78 88 98 !8 #8 $8 %8 '8 (8 )8 *8 An MI +8 ,8 -8 .8 /8 :8 ;8 =8 ?8 @8 [8 ]8 ^8 _8 `8 {8 |8 }8 ~8 a9 b9 c9 d9 Bn e9 f9 Cn g9 Dn h9 i9 j9 k9 l9 En m9 NI Fn zc Gn n9 o9 p9 q9 Ac Bc Cc ub Lb Dc Hn Ec Fc Mb F In oh OI Jn r9 PI Kn s9 QI Ln t9 RI Mn u9 SI Nn v9 TI On w9 UI Pn x9 VI Qn y9 WI Rn z9 XI Sn A9 YI Tn B9 ZI Un C9 0I Vn D9 E9 F9 1I Wn G9 H9 I9 2I Xn J9 K9 L9 3I Yn M9 N9 4I Zn O9 P9 5I 0n Q9 R9 6I 1n S9 T9 7I 2n U9 V9 8I 3n W9 X9 9I 4n Y9 Z9 09 19 29 39 49 5n !I 59 69 6n #I 79 $I 7n 89 99 !9 #9 $9 %9 %I 8n '9 (9 )9 *9 +9 ,9 -9 9n 'I .9 /9 !n (I :9 )I #n ;9 =9 *I $n ?9 @9 +I %n [9 ]9 'n (n )n ^9 *n _9 `9 {9 |9 }9 ~9 +n a! b! c! ,n d! e! f! g! h! -n i! j! k! l! .n m! n! o! p! q! ,I r! /n s! t! :n -I u! Ai ;n v! .I w! =n /I x! y! z! A! :I ?n B! ;I @n C! =I [n D! ?I ]n E! F! ^n _n `n {n G! |n H! @I }n ~n ao #F I! bo ;i TF =i UF ?i +F J! K! L! M! N! O! P! Q! R! S! T! [I U! V! W! X! Y! Z! 0! 1! 2! 3! co 4! 5! do 6! 7! 8! ]I 9! !! #! $! %! '! (! )! *! +! ,! -! eo .! ^I _I fo /! :! ;! `I =! ?! go {I ho @! io |I }I [! i |e Gc ]! Bi ^! Ci _! Di jo `! {! |! ~I ko }! ~! a# aJ lo bJ mo b# c# d# e# f# g# h# i# no j# oo k# po l# qo cJ ro dJ so eJ to fJ uo gJ hJ vo iJ wo xo yo zo Ao Bo jJ m# Co Do kJ n# lJ mJ Eo Fo nJ Go oJ o# p# Ho q# pJ r# Io s# t# u# Jo v# w# Ko x# y# Lo z# A# B# C# Mo D# E# F# qJ No rJ Oo sJ Po tJ Qo `U Ro uJ So G# vJ To wJ Uo xJ Vo yJ H# zJ Wo I# Xo J# AJ Yo K# BJ Zo L# CJ M# N# 0o DJ EJ O# 1o P# Q# 2o FJ 3o R# S# T# GJ 4o U# V# W# HJ 5o X# Y# Z# 0# IJ 6o JJ 7o KJ 8o LJ 9o MJ !o NJ OJ #o $o PJ %o QJ 'o RJ (o SJ )o TJ UJ VJ *o +o WJ XJ ,o YJ -o 1# 2# ZJ .o 3# 4# /o 5# 0J 1J 2J :o 3J ;o =o 4J 6# ?o 7# 8# 9# 5J @o 6J [o 7J ]o 8J 9J ^o !# ## $# !J _o %# '# (# `o )# #J {o *# $J %J +# ,# |o -# }o 'J .# ~o /# (J ap )J :# bp ;# *J =# ?# @# cp +J ,J [# ]# dp ^# _# -J `# ep {# |# .J fp }# ~# /J a$ b$ gp c$ d$ :J hp e$ ;J ip f$ g$ h$ i$ =J j$ jp k$ l$ m$ n$ ?J o$ kp p$ q$ r$ s$ @J lp t$ u$ v$ w$ [J x$ y$ z$ mp A$ np op pp qp rp ]J sp ^J tp up B$ _J vp `J wp C$ {J xp |J }J yp D$ ~J zp E$ aK Ap bK Bp cK Cp dK Dp F$ Ep eK G$ H$ I$ J$ Fp K$ L$ M$ fK N$ O$ P$ Gp Q$ R$ S$ gK T$ U$ V$ W$ X$ Y$ Z$ 0$ 1$ hK Hp 2$ 3$ 4$ Ip iK 5$ Jp jK 6$ Kp Lp 7$ kK 8$ lK 9$ ph 'g !$ Hc #$ mK Mp $$ nK %$ '$ Nb ($ )$ Np *$ +$ ,$ -$ .$ Op /$ Pp :$ ;$ =$ ?$ @$ Qp [$ Rp ]$ ^$ Sp oK _$ Tp ^ `$ {$ pK |$ Up qK Vp }$ ~$ Wp a% b% c% d% e% Xp f% Yp qh Ic Zp g% h% 0p Jc Kc Lc i% j% k% l% m% n% o% p% c 1p 2p 3p q% 4p 5p 6p rK 7p r% sK tK 8p Ei rh sh th uh 9p s% t% u% uK v% w% x% !p @i #p Mc Nc vK y% $p wK dV =U tV %p Oc Pc z% A% B% C% D% E% F% G% H% I% J% K% L% M% N% O% P% Q% xK R% S% 'p T% U% V% W% X% Y% Z% 0% 1% (p vh )p 2% *p yK wh 3% 4% Fi uV Qc Rc Sc +p 5% 6% 7% 8% 9% !% #% $% %% '% (% )% *% ,p +% ,% -% .% /% :% ;% =% ?% @% [% ]% ^% _% `% {% -p |% }% ~% a' .p b' c' /p d' :p e' f' g' ;p h' i' j' =p k' l' m' n' o' p' q' r' s' t' u' v' w' x' y' z' A' B' ?p C' D' @p zK E' F' G' H' [p I' J' K' L' M' N' O' P' Q' R' S' T' U' V' W' X' Y' Z' 0' 1' 2' ]p 3' 4' ^p _p 5' 6' `p {p 7' Tc Uc |p 8' 9' !' #' $' %' '' }p (' )' *' +' ,' [i VF ~p AK aq -' .' xh ]i /' :' ;' =' ?' bq @' [' BK ]' ^' _' cq `' dq CK {' eq yh fq |' gq hq }' ~' a( b( c( d( e( iq DK jq G _ H I J K L ` kq EK zh lq FK mq f( nq g( oq GK h( i( j( k( l( m( n( pq o( p( HK Vc Wc IK qq q( r( JK rq s( sq t( KK tq LK u( !i v( uq MK Ah vq NK wq OK Ob Pb Qb M N Rb xq PK yq w( zq x( Aq QK Bq y( z( A( B( Bh C( D( E( F( G( H( I( J( K( L( M( N( O( P( Q( R( S( T( U( V( W( X( Y( Z( 0( 1( 2( 3( 4( 5( 6( 7( 8( 9( !( #( $( %( '( (( )( *( +( ,( -( .( /( :( ;( =( ?( @( [( ]( ^( _( `( {( |( }( ~( a) b) c) d) e) f) g) h) i) j) k) l) m) n) RK Cq o) p) q) r) s) t) u) Dq v) w) SK x) Eq y) z) A) B) C) D) E) F) G) H) I) TK J) K) UK L) M) N) O) P) Q) Fq R) S) T) U) V) W) X) Y) Z) 0) 1) 2) 3) 4) 5) 6) VK Gq 7) 8) 9) !) #) $) %) ') () )) *) WK +) ,) -) .) Hq /) :) ;) =) ?) @) [) ]) ^) _) `) {) |) }) ~) a* b* c* d* e* f* g* h* i* j* k* l* m* n* o* p* q* r* s* t* u* v* w* x* y* z* A* B* C* D* Iq E* Xc Yc Zc { 0c 1c | 2c 3c 4c Jq F* Ch Kq XK Lq YK Dh G* H* I* J* Mq K* L* M* N* O* Nq P* Q* ZK Oq R* S* T* U* V* W* X* Y* Pq Eh Qq 0K Z* 0* 1* 2* 3* 4* 5* 6* 7* 8* 9* !* #* Rq 1K $* %* '* (* )* ** +* ,* -* .* /* :* ;* =* ?* @* [* ]* ^* _* `* {* |* Sq }* ~* Tq a+ Uq b+ c+ d+ e+ f+ Vq g+ 2K Wq 5c Xq h+ i+ j+ k+ 6c 7c 8c vb Sb 9c Yq !c #c Zq Fh Tb O 0q Gh 3K 1q l+ 4K 2q m+ 5K 3q n+ 6K 4q o+ 7K 5q p+ 8K 6q q+ 9K 7q r+ !K 8q s+ #K 9q t+ $K !q u+ %K #q v+ 'K $q w+ (K %q x+ y+ z+ )K 'q A+ B+ C+ *K (q D+ E+ F+ +K )q G+ H+ ,K *q I+ J+ -K +q K+ L+ .K ,q M+ N+ /K -q O+ P+ :K .q Q+ R+ ;K /q S+ T+ U+ V+ W+ X+ Y+ :q =K Z+ 0+ ;q ?K 1+ @K =q 2+ 3+ 4+ 5+ 6+ 7+ [K ?q 8+ 9+ !+ #+ $+ %+ '+ @q ]K (+ )+ [q ^K *+ _K ]q ++ ,+ `K ^q -+ .+ {K _q /+ :+ `q {q |q ;+ }q =+ ?+ @+ [+ ]+ ^+ ~q _+ `+ {+ ar |+ }+ ~+ a, b, br c, d, e, f, cr g, h, i, j, k, |K l, dr m, n, $c er }K o, Gi fr p, ~K q, gr aL r, s, t, u, bL hr v, cL ir w, dL jr x, eL kr y, z, lr mr nr or A, pr B, fL qr rr sr $F C, tr ^i WF _i XF `i ,F D, E, F, G, H, I, J, K, L, M, N, gL O, P, Q, R, S, T, U, V, W, X, ur Y, Z, vr 0, 1, 2, hL 3, 4, 5, 6, 7, 8, 9, !, #, $, %, ', wr (, iL jL xr ), *, +, kL ,, -, yr lL zr ., Ar mL nL /, j Cf %c :, Hi ;, Ii =, Ji Br ?, @, [, oL Cr ], ^, _, pL Dr qL Er `, {, |, }, ~, a- b- c- Fr d- Gr e- Hr f- Ir rL Jr sL Kr tL Lr uL Mr vL wL Nr xL Or Pr Qr Rr Sr Tr yL g- Ur Vr zL h- AL BL Wr Xr CL Yr DL i- j- Zr k- EL l- 0r m- n- o- 1r p- q- 2r r- s- 3r t- u- v- w- 4r x- y- z- FL 5r GL 6r HL 7r IL 8r {U 9r JL !r A- KL #r LL $r ML %r NL B- OL 'r C- (r D- PL )r E- QL *r F- RL G- H- +r SL TL I- ,r J- K- -r UL .r L- M- N- VL /r O- P- Q- WL :r R- S- T- U- XL ;r YL =r ZL ?r 0L @r 1L [r 2L 3L ]r ^r 4L _r 5L `r 6L {r 7L |r 8L 9L !L }r ~r #L $L as %L bs V- W- 'L cs X- Y- ds Z- (L )L *L es +L fs gs ,L 0- hs 1- 2- 3- -L is .L js /L ks :L ;L ls 4- 5- 6- =L ms 7- 8- 9- ns !- ?L os #- @L [L $- %- ps '- qs ]L (- rs )- ^L ss _L *- ts +- `L ,- -- .- us {L |L /- :- vs ;- =- }L ?- ws @- [- ~L xs ]- ^- aM _- `- ys {- |- bM zs }- cM As ~- a. b. c. dM d. Bs e. f. g. h. eM i. Cs j. k. l. m. fM Ds n. o. p. q. gM r. s. t. Es u. Fs Gs Hs Is Js hM Ks iM Ls Ms v. jM Ns kM Os w. lM Ps mM nM Qs x. oM Rs y. pM Ss qM Ts rM Us sM Vs z. Ws tM A. B. C. D. Xs E. F. G. uM H. I. J. Ys K. L. M. vM N. O. P. Q. R. S. T. U. V. wM Zs W. X. Y. 0s xM Z. 1s yM 0. 2s 3s 1. zM 2. AM 3. Hh (g 4. 'c 5. BM 4s 6. CM 7. 8. Ub 9. !. 5s #. $. %. '. (. 6s ). 7s *. +. ,. -. .. 8s /. 9s :. ;. !s (c DM =. #s } ?. @. EM [. $s FM %s ]. ^. 's _. `. {. |. }. (s ~. )s Ih )c *s a/ b/ +s *c +c ,c c/ d/ e/ f/ g/ h/ i/ j/ d ,s -s .s k/ /s :s ;s GM =s l/ HM IM ?s Ki Jh Kh Lh Mh @s m/ n/ o/ JM p/ q/ r/ [s {i ]s -c .c KM s/ ^s LM eV ?U vV _s /c :c t/ u/ v/ w/ x/ y/ z/ A/ B/ C/ D/ E/ F/ G/ H/ I/ J/ K/ MM L/ M/ `s N/ O/ P/ Q/ R/ S/ T/ U/ V/ {s Nh |s W/ }s NM Oh X/ Y/ Li wV ;c =c ?c ~s Z/ 0/ 1/ 2/ 3/ 4/ 5/ 6/ 7/ 8/ 9/ !/ #/ at $/ %/ '/ (/ )/ */ +/ ,/ -/ ./ // :/ ;/ =/ ?/ @/ bt [/ ]/ ^/ _/ ct `/ {/ dt |/ et }/ ~/ a: ft b: c: d: gt e: f: g: h: i: j: k: l: m: n: o: p: q: r: s: t: u: v: ht w: x: it OM y: z: A: B: jt C: D: E: F: G: H: I: J: K: L: M: N: O: P: Q: R: S: T: U: V: W: kt X: Y: lt mt Z: 0: nt ot 1: @c [c pt 2: 3: 4: 5: 6: 7: 8: qt 9: !: #: $: %: |i YF rt PM st ': (: Ph }i ): *: +: ,: -: tt .: /: QM :: ;: =: ut ?: vt RM @: wt Qh xt [: yt zt ]: ^: _: `: {: |: }: At SM Bt P ~ Q R S T U ab Ct TM Rh Dt UM Et ~: Ft a; Gt VM b; c; d; e; f; g; h; Ht i; j; WM ]c ^c XM It k; l; YM Jt m; Kt n; ZM Lt 0M o; #i p; Mt 1M Sh Nt 2M Ot 3M Vb Wb Xb V W Yb Pt 4M Qt q; Rt r; St 5M Tt s; t; u; v; Th w; x; y; z; A; B; C; D; E; F; G; H; I; J; K; L; M; N; O; P; Q; R; S; T; U; V; W; X; Y; Z; 0; 1; 2; 3; 4; 5; 6; 7; 8; 9; !; #; $; %; '; (; ); *; +; ,; -; .; /; :; ;; =; ?; @; [; ]; ^; _; `; {; |; }; ~; a= b= c= d= e= f= g= h= 6M Ut i= j= k= l= m= n= o= Vt p= q= 7M r= Wt s= t= u= v= w= x= y= z= A= B= C= 8M D= E= 9M F= G= H= I= J= K= Xt L= M= N= O= P= Q= R= S= T= U= V= W= X= Y= Z= 0= !M Yt 1= 2= 3= 4= 5= 6= 7= 8= 9= != #= #M $= %= '= (= Zt )= *= += ,= -= .= /= := ;= == ?= @= [= ]= ^= _= `= {= |= }= ~= a? b? c? d? e? f? g? h? i? j? k? l? m? n? o? p? q? r? s? t? u? v? w? x? 0t y? _c `c {c bb |c }c cb ~c ad bd 1t z? Uh 2t $M 3t %M Vh A? B? C? D? 4t E? F? G? H? I? 5t J? K? 'M 6t L? M? N? O? P? Q? R? S? 7t Wh 8t (M T? U? V? W? X? Y? Z? 0? 1? 2? 3? 4? 5? 9t )M 6? 7? 8? 9? !? #? $? %? '? (? )? *? +? ,? -? .? /? :? ;? =? ?? @? [? !t ]? ^? #t _? $t `? {? |? }? ~? %t a@ *M 't cd (t b@ c@ d@ e@ dd ed fd wb Zb gd )t hd id *t Xh 0b X +t Yh +M ,t f@ ,M -t g@ -M .t h@ .M /t i@ /M :t j@ :M ;t k@ ;M =t l@ =M ?t m@ ?M @t n@ @M [t o@ [M ]t p@ ]M ^t q@ ^M _t r@ s@ t@ _M `t u@ v@ w@ `M {t x@ y@ z@ {M |t A@ B@ |M }t C@ D@ }M ~t E@ F@ ~M au G@ H@ aN bu I@ J@ bN cu K@ L@ cN du M@ N@ O@ P@ Q@ R@ S@ eu dN T@ U@ fu eN V@ fN gu W@ X@ Y@ Z@ 0@ 1@ gN hu 2@ 3@ 4@ 5@ 6@ 7@ 8@ iu hN 9@ !@ ju iN #@ jN ku $@ %@ kN lu '@ (@ lN mu )@ *@ nu ou pu +@ qu ,@ -@ .@ /@ :@ ;@ ru =@ ?@ @@ su [@ ]@ ^@ _@ `@ tu {@ |@ }@ ~@ uu a[ b[ c[ d[ e[ mN f[ vu g[ h[ jd wu nN i[ Mi xu j[ oN k[ yu pN l[ m[ n[ o[ qN zu p[ rN Au q[ sN Bu r[ tN Cu s[ t[ Du Eu Fu Gu u[ Hu v[ uN Iu Ju Ku %F w[ Lu ~i ZF aj 0F bj -F x[ y[ z[ A[ B[ C[ D[ E[ F[ G[ H[ vN I[ J[ K[ L[ M[ N[ O[ P[ Q[ R[ Mu S[ T[ Nu U[ V[ W[ wN X[ Y[ Z[ 0[ 1[ 2[ 3[ 4[ 5[ 6[ 7[ 8[ Ou 9[ xN yN Pu ![ #[ $[ zN %[ '[ Qu AN Ru ([ Su BN CN )[ k 7f kd *[ Ni +[ Oi ,[ Pi Tu -[ .[ /[ DN Uu :[ ;[ =[ EN Vu FN Wu ?[ @[ [[ ][ ^[ _[ `[ {[ Xu |[ Yu }[ Zu ~[ 0u GN 1u HN 2u IN 3u JN 4u KN LN 5u MN 6u 7u 8u 9u !u #u NN a] $u %u ON b] PN QN 'u (u RN )u SN c] d] *u e] TN f] +u g] h] i] ,u j] k] -u l] m] .u n] o] p] q] /u r] s] t] UN :u VN ;u WN =u XN ?u |U @u YN [u u] ZN ]u 0N ^u 1N _u 2N v] 3N `u w] {u x] 4N |u y] 5N }u z] 6N A] B] ~u 7N 8N C] av D] E] bv 9N cv F] G] H] !N dv I] J] K] #N ev L] M] N] O] $N fv %N gv 'N hv (N iv )N jv *N +N kv lv ,N mv -N nv .N ov /N pv :N ;N =N qv rv ?N @N sv [N tv P] Q] ]N uv R] S] vv T] ^N _N `N wv {N xv yv |N U] zv V] W] X] }N Av ~N Bv aO Cv bO cO Dv Y] Z] 0] dO Ev 1] 2] 3] Fv 4] eO Gv 5] fO gO 6] 7] Hv 8] Iv hO 9] Jv !] iO Kv jO #] Lv $] kO %] '] (] Mv lO mO )] *] Nv +] ,] nO -] Ov .] /] oO Pv :] ;] pO =] ?] Qv @] [] qO Rv ]] rO Sv ^] _] `] {] sO |] Tv }] ~] a^ b^ tO c^ Uv d^ e^ f^ g^ uO Vv h^ i^ j^ k^ vO l^ m^ n^ Wv o^ Xv Yv Zv 0v 1v wO 2v xO 3v 4v p^ yO 5v zO 6v q^ AO 7v BO CO 8v r^ DO 9v s^ EO !v FO #v GO $v HO %v t^ 'v IO u^ v^ w^ x^ (v y^ z^ A^ JO B^ C^ D^ )v E^ F^ G^ KO H^ I^ J^ K^ L^ M^ N^ O^ P^ LO *v Q^ R^ S^ +v MO T^ ,v NO U^ -v .v V^ OO W^ PO X^ Zh )g Y^ ld Z^ QO /v 0^ RO 1^ 2^ 1b 3^ 4^ :v 5^ 6^ 7^ 8^ 9^ ;v !^ =v #^ $^ %^ '^ (^ ?v )^ @v *^ +^ [v md SO ,^ ]v db -^ .^ TO /^ ^v UO _v :^ ;^ `v =^ ?^ @^ [^ ]^ {v ^^ |v 0h nd }v _^ `^ ~v od pd qd {^ |^ }^ ~^ a_ b_ c_ d_ e aw bw cw e_ dw ew fw VO gw f_ WO XO hw Qi 1h 2h 3h 4h iw g_ h_ i_ YO j_ k_ l_ jw cj kw rd sd ZO m_ lw 0O fV @U xV mw td ud n_ o_ p_ q_ r_ s_ t_ u_ v_ w_ x_ y_ z_ A_ B_ C_ D_ E_ 1O F_ G_ nw H_ I_ J_ K_ L_ M_ N_ O_ P_ ow 5h pw Q_ qw 2O 6h R_ S_ Ri yV vd wd xd rw T_ U_ V_ W_ X_ Y_ Z_ 0_ 1_ 2_ 3_ 4_ 5_ sw 6_ 7_ 8_ 9_ !_ #_ $_ %_ '_ (_ )_ *_ +_ ,_ -_ ._ tw /_ :_ ;_ =_ uw ?_ @_ vw [_ ww ]_ ^_ __ xw `_ {_ |_ yw }_ ~_ a` b` c` d` e` f` g` h` i` j` k` l` m` n` o` p` zw q` r` Aw 3O s` t` u` v` Bw w` x` y` z` A` B` C` D` E` F` G` H` I` J` K` L` M` N` O` P` Q` Cw R` S` Dw Ew T` U` Fw Gw V` yd zd Hw W` X` Y` Z` 0` 1` 2` Iw 3` 4` 5` 6` 7` dj 1F Jw 4O Kw 8` 9` 7h ej !` #` $` %` '` Lw (` )` 5O *` +` ,` Mw -` Nw 6O .` Ow 8h Pw /` Qw Rw :` ;` =` ?` @` [` ]` Sw 7O Tw Y eb Z 0 1 2 3 fb Uw 8O 9h Vw 9O Ww ^` Xw _` Yw !O `` {` |` }` ~` a{ b{ Zw c{ d{ #O Ad Bd $O 0w e{ f{ %O 1w g{ 2w h{ 'O 3w (O i{ $i j{ 4w )O !h 5w *O 6w +O 2b 3b 4b 4 5 5b 7w ,O 8w k{ 9w l{ !w -O #w m{ n{ o{ p{ #h q{ r{ s{ t{ u{ v{ w{ x{ y{ z{ A{ B{ C{ D{ E{ F{ G{ H{ I{ J{ K{ L{ M{ N{ O{ P{ Q{ R{ S{ T{ U{ V{ W{ X{ Y{ Z{ 0{ 1{ 2{ 3{ 4{ 5{ 6{ 7{ 8{ 9{ !{ #{ ${ %{ '{ ({ ){ *{ +{ ,{ -{ .{ /{ :{ ;{ ={ ?{ @{ [{ ]{ ^{ _{ `{ {{ |{ }{ ~{ a| b| .O $w c| d| e| f| g| h| i| %w j| k| /O l| 'w m| n| o| p| q| r| s| t| u| v| w| :O x| y| ;O z| A| B| C| D| E| (w F| G| H| I| J| K| L| M| N| O| P| Q| R| S| T| U| =O )w V| W| X| Y| Z| 0| 1| 2| 3| 4| 5| ?O 6| 7| 8| 9| *w !| #| $| %| '| (| )| *| +| ,| -| .| /| :| ;| =| ?| @| [| ]| ^| _| `| {| || }| ~| a} b} c} d} e} f} g} h} i} j} k} l} m} n} o} p} q} r} +w s} Cd Dd Ed gb Fd Gd hb Hd Id Jd ,w t} $h -w @O .w [O %h u} v} w} x} /w y} z} A} B} C} :w D} E} ]O ;w F} G} H} I} J} K} L} M} =w 'h ?w ^O N} O} P} Q} R} S} T} U} V} W} X} Y} Z} @w _O 0} 1} 2} 3} 4} 5} 6} 7} 8} 9} !} #} $} %} '} (} )} *} +} ,} -} .} /} [w :} ;} ]w =} ^w ?} @} [} ]} ^} _w _} `O `w Kd {w `} {} |} }} Ld Md Nd xb 6b Od |w Pd Qd }w (h 7b 6 ~w )h {O ax ~} |O bx a~ }O cx b~ ~O dx c~ aP ex d~ bP fx e~ cP gx f~ dP hx g~ eP ix h~ fP jx i~ gP kx j~ hP lx k~ iP mx l~ m~ n~ jP nx o~ p~ q~ kP ox r~ s~ t~ lP px u~ v~ mP qx w~ x~ nP rx y~ z~ oP sx A~ B~ pP tx C~ D~ qP ux E~ F~ rP vx G~ H~ I~ J~ K~ L~ M~ wx sP N~ O~ xx tP P~ uP yx Q~ R~ S~ T~ U~ V~ vP zx W~ X~ Y~ Z~ 0~ 1~ 2~ Ax wP 3~ 4~ Bx xP 5~ yP Cx 6~ 7~ zP Dx 8~ 9~ AP Ex !~ #~ Fx Gx Hx $~ Ix %~ '~ (~ )~ *~ +~ Jx ,~ -~ .~ Kx /~ :~ ;~ =~ ?~ Lx @~ [~ ]~ ^~ Mx _~ `~ {~ |~ }~ BP ~~ Nx aabbabRd Ox CP cabSi Px dabDP eabQx EP fabgabhabiabFP Rx jabGP Sx kabHP Tx labIP Ux mabnabVx Wx Xx Yx oabZx pabJP 0x 1x 2x 'F qab3x fj 2F gj 3F hj .F rabsabtabuabvabwabxabyabzabAabBabKP CabDabEabFabGabHabIabJabKabLab4x MabNab5x OabPabQabLP RabSabTabUabVabWabXabYabZab0ab1ab2ab6x 3abMP NP 7x 4ab5ab6abOP 7ab8ab8x PP 9x 9ab!x QP RP !abl bg Sd #abTi $abUi %abVi #x 'ab(ab)abSP $x *ab+ab,abTP %x UP 'x -ab.ab/ab:ab;ab=ab?ab@ab(x [ab)x ]ab*x ^ab+x VP ,x WP -x XP .x YP /x ZP 0P :x 1P ;x =x ?x @x [x ]x 2P _ab^x _x 3P `ab4P 5P `x {x 6P |x 7P {ab|ab}x }ab8P ~ab~x abbbbbcbbay dbbebbby fbbgbbcy hbbibbjbbkbbdy lbbmbbnbb9P ey !P fy #P gy $P hy }U iy %P jy obb'P ky (P ly )P my *P pbb+P ny qbboy rbb,P py sbb-P qy tbb.P ubbvbbry /P :P wbbsy xbbybbty ;P uy zbbAbbBbb=P vy CbbDbbEbb?P wy FbbGbbHbbIbb@P xy [P yy ]P zy ^P Ay _P By `P {P Cy Dy |P Ey }P Fy ~P Gy aQ Hy bQ cQ dQ Iy Jy eQ fQ Ky gQ Ly JbbKbbhQ My LbbMbbNy NbbiQ jQ kQ Oy lQ Py Qy mQ ObbRy PbbQbbRbbnQ Sy oQ Ty pQ Uy qQ rQ Vy SbbTbbUbbsQ Wy VbbWbbXbbXy YbbtQ Yy ZbbuQ vQ 0bb1bbZy 2bb0y wQ 3bb1y 4bbxQ 2y yQ 5bb3y 6bbzQ 7bb8bb9bb4y AQ BQ !bb#bb5y $bb%bbCQ 'bb6y (bb)bbDQ 7y *bb+bbEQ ,bb-bb8y .bb/bbFQ 9y :bbGQ !y ;bb=bb?bb@bbHQ [bb#y ]bb^bb_bb`bbIQ {bb$y |bb}bb~bbacbJQ %y bcbccbdcbecbKQ fcbgcbhcb'y icb(y )y *y +y ,y LQ -y MQ .y /y jcbNQ :y OQ ;y kcbPQ =y QQ RQ ?y lcbSQ @y mcbTQ [y UQ ]y VQ ^y WQ _y ncb`y XQ ocbpcbqcbrcb{y scbtcbucbYQ vcbwcbxcb|y ycbzcbAcbZQ BcbCcbDcbEcbFcbGcbHcbIcbJcb0Q }y KcbLcbMcb~y 1Q Ncbaz 2Q Ocbbz cz Pcb3Q Qcb4Q Rcb*h *g ScbTd Tcb5Q dz Ucb6Q VcbWcb8b XcbYcbez Zcb0cb1cb2cb3cbfz 4cbgz 5cb6cb7cb8cb9cbhz !cbiz #cb$cbjz Ud 7Q %cbkz ib 'cb(cb8Q )cblz 9Q mz *cb+cbnz ,cb-cb.cb/cb:cboz ;cbpz +h Vd qz =cb?cbrz Wd Xd Yd @cb[cb]cb^cb_cb`cb{cb|cbf sz tz uz }cbvz wz xz !Q yz ~cb#Q $Q zz Wi ,h -h .h /h Az adbbdbcdb%Q ddbedbfdbBz ij Cz Zd 0d 'Q gdbDz (Q gV [U zV Ez 1d 2d hdbidbjdbkdbldbmdbndbodbpdbqdbrdbsdbtdbudbvdbwdbxdbydb)Q zdbAdbFz BdbCdbDdbEdbFdbGdbHdbIdbJdbGz :h Hz KdbIz *Q ;h LdbMdbXi AV 3d 4d 5d Jz NdbOdbPdbQdbRdbSdbTdbUdbVdbWdbXdbYdbZdbKz 0db1db2db3db4db5db6db7db8db9db!db#db$db%db'db(dbLz )db*db+db,dbMz -db.dbNz /dbOz :db;db=dbPz ?db@db[dbQz ]db^db_db`db{db|db}db~dbaebbebcebdebeebfebgebhebiebjebRz keblebSz +Q mebneboebpebTz qebrebsebtebuebvebwebxebyebzebAebBebCebDebEebFebGebHebIebJebKebUz LebMebVz Wz NebOebXz Yz Peb6d 7d Zz QebRebSebTebUebVebWeb0z XebYebZeb0eb1ebjj 4F 1z ,Q 2z 2eb3eb=h kj 4eb5eb6eb7eb8eb3z 9eb!eb-Q #eb$eb%eb4z 'eb5z .Q (eb6z ?h 7z )eb8z 9z *eb+eb,eb-eb.eb/eb:eb!z /Q #z 7 jb 8 9 ! # $ kb $z :Q @h %z ;Q 'z ;eb(z =eb)z =Q ?eb@eb[eb]eb^eb_eb`eb*z {eb|eb?Q 8d 9d @Q +z }eb~eb[Q ,z afb-z bfb]Q .z ^Q cfb%i dfb/z _Q [h :z `Q ;z {Q 9b !b #b % ' $b =z |Q ?z efb@z ffb[z }Q ]z gfbhfbifbjfb]h kfblfbmfbnfbofbpfbqfbrfbsfbtfbufbvfbwfbxfbyfbzfbAfbBfbCfbDfbEfbFfbGfbHfbIfbJfbKfbLfbMfbNfbOfbPfbQfbRfbSfbTfbUfbVfbWfbXfbYfbZfb0fb1fb2fb3fb4fb5fb6fb7fb8fb9fb!fb#fb$fb%fb'fb(fb)fb*fb+fb,fb-fb.fb/fb:fb;fb=fb?fb@fb[fb]fb^fb_fb`fb~Q ^z {fb|fb}fb~fbagbbgbcgb_z dgbegbaR fgb`z ggbhgbigbjgbkgblgbmgbngbogbpgbqgbbR rgbsgbcR tgbugbvgbwgbxgbygb{z zgbAgbBgbCgbDgbEgbFgbGgbHgbIgbJgbKgbLgbMgbNgbOgbdR |z PgbQgbRgbSgbTgbUgbVgbWgbXgbYgbZgbeR 0gb1gb2gb3gb}z 4gb5gb6gb7gb8gb9gb!gb#gb$gb%gb'gb(gb)gb*gb+gb,gb-gb.gb/gb:gb;gb=gb?gb@gb[gb]gb^gb_gb`gb{gb|gb}gb~gbahbbhbchbdhbehbfhbghbhhbihbjhbkhblhb~z mhb!d #d $d lb %d 'd mb (d )d *d aA nhb^h bA fR cA gR _h ohbphbqhbrhbdA shbthbuhbvhbwhbeA xhbyhbhR fA zhbAhbBhbChbDhbEhbFhbGhbgA `h hA iR HhbIhbJhbKhbLhbMhbNhbOhbPhbQhbRhbShbThbiA jR UhbVhbWhbXhbYhbZhb0hb1hb2hb3hb4hb5hb6hb7hb8hb9hb!hb#hb$hb%hb'hb(hb)hbjA *hb+hbkA ,hblA -hb.hb/hb:hb;hbmA =hbkR nA +d oA ?hb@hb[hb]hb,d -d .d yb %b /d pA :d ;d qA {h 'b ( rA |h lR sA ^hbmR tA _hbnR uA `hboR vA {hbpR wA |hbqR xA }hbrR yA ~hbsR zA aibtR AA bibuR BA cibvR CA dibwR DA eibxR EA fibgibhibyR FA iibjibkibzR GA libmibnibAR HA oibpibBR IA qibribCR JA sibtibDR KA uibvibER LA wibxibFR MA yibzibGR NA AibBibCibDibEibFibGibOA HR HibIibPA IR JibJR QA KibLibMibNibOibPibKR RA QibRibSibTibUibVibWibSA LR XibYibTA MR ZibNR UA 0ib1ibOR VA 2ib3ibPR WA 4ib5ibXA YA ZA 6ib0A 7ib8ib9ib!ib#ib$ib1A %ib'ib(ib2A )ib*ib+ib,ib-ib3A .ib/ib:ib;ib4A =ib?ib@ib[ib]ibQR ^ib5A _ib`ib=d 6A RR {ibYi 7A |ibSR }ib8A TR ~ibajbbjbcjbUR 9A djbVR !A ejbWR #A fjbXR $A gjbhjb%A 'A (A )A ijb*A jjbYR +A ,A -A (F kjb.A lj 5F mj 6F nj /F ljbmjbnjbojbpjbqjbrjbsjbtjbujbvjbZR wjbxjbyjbzjbAjbBjbCjbDjbEjbFjb/A GjbHjb:A IjbJjbKjb0R LjbMjbNjbOjbPjbQjbRjbSjbTjbUjbVjbWjb;A Xjb1R 2R =A YjbZjb0jb3R 1jb2jb?A 4R @A 3jb[A 5R 6R 4jbm Gg ?d 5jbZi 6jb0i 7jb1i ]A 8jb9jb!jb7R ^A #jb$jb%jb8R _A 9R `A 'jb(jb)jb*jb+jb,jb-jb.jb{A /jb|A :jb}A ;jb~A !R aB #R bB $R cB %R dB 'R (R eB )R fB gB hB iB jB kB *R =jblB mB +R ?jb,R -R nB oB .R pB /R @jb[jbqB ]jb:R ^jbrB _jb`jb{jbsB |jb}jbtB ~jbakbuB bkbckbdkbekbvB fkbgkbhkb;R wB =R xB ?R yB @R zB ~U AB [R BB ikb]R CB ^R DB _R EB `R jkb{R FB kkbGB lkb|R HB mkb}R IB nkb~R okbpkbJB aS bS qkbKB rkbskbLB cS MB tkbukbvkbdS NB wkbxkbykbeS OB zkbAkbBkbCkbfS PB gS QB hS RB iS SB jS TB kS lS UB VB mS WB nS XB oS YB pS ZB qS rS sS 0B 1B tS uS 2B vS 3B DkbEkbwS 4B FkbGkb5B HkbxS yS zS 6B AS 7B 8B BS Ikb9B JkbKkbLkbCS !B DS #B ES $B FS GS %B MkbNkbOkbHS 'B PkbQkbRkb(B SkbIS )B TkbJS KS UkbVkb*B Wkb+B LS Xkb,B YkbMS -B NS Zkb.B 0kbOS 1kb2kb3kb/B PS QS 4kb5kb:B 6kb7kbRS 8kb;B 9kb!kbSS =B #kb$kbTS %kb'kb?B (kb)kbUS @B *kbVS [B +kb,kb-kb.kbWS /kb]B :kb;kb=kb?kbXS @kb^B [kb]kb^kb_kbYS _B `kb{kb|kb}kbZS ~kbalbblb`B clb{B |B }B ~B aC 0S bC 1S cC dC dlb2S eC 3S fC elb4S gC 5S 6S hC flb7S iC glb8S jC 9S kC !S lC #S mC hlbnC $S ilbjlbklbllboC mlbnlbolb%S plbqlbrlbpC slbtlbulb'S vlbwlbxlbylbzlbAlbBlbClbDlb(S qC ElbFlbGlbrC )S HlbsC *S IlbtC uC Jlb+S Klb,S Llb}h +g Mlb@d Nlb-S vC Olb.S PlbQlb(b RlbSlbwC TlbUlbVlbWlbXlbxC YlbyC Zlb0lb1lb2lb3lbzC 4lbAC 5lb6lbBC [d /S 7lbCC nb 8lb9lb:S !lbDC ;S EC #lb$lbFC %lb'lb(lb)lb*lbGC +lbHC ~h ]d IC ,lb-lbJC ^d _d `d .lb/lb:lb;lb=lb?lb@lb[lbg KC LC MC ]lbNC OC PC =S QC ^lb?S @S RC 2i ai bi ci di SC _lb`lb{lb[S |lb}lb~lbTC oj UC {d |d ]S ambVC ^S hV ]U BV WC }d ~d XC ei YC bmbZC _S fi cmbdmb3i CV ae be 0C embfmbgmbhmbimbjmbkmblmbmmbnmbombpmbqmb1C rmbsmbtmbumbvmbwmbxmbymbzmbAmbBmbCmbDmbEmbFmbGmb2C HmbImbJmbKmb3C LmbMmb4C Nmb5C OmbPmbQmb6C RmbSmbTmb7C UmbVmbWmbXmbYmbZmb0mb1mb2mb3mb4mb5mb6mb7mb8mb9mb!mb#mb8C $mb%mb9C `S 'mb(mb)mb*mb!C +mb,mb-mb.mb/mb:mb;mb=mb?mb@mb[mb]mb^mb_mb`mb{mb|mb}mb~mbanbbnb#C cnbdnb$C %C enbfnb'C (C gnbce de )C hnbinbjnbknblnbmnbnnb*C onbpnbqnbrnbsnbpj 7F +C {S ,C tnbunbgi qj vnbwnbxnbynbznb-C AnbBnb|S CnbDnbEnb.C Fnb/C hi :C Gnb;C =C HnbInbJnbKnbLnbMnbNnb?C }S @C ) ob * + , - . pb [C ~S ii ]C aT ^C Onb_C Pnb`C bT QnbRnbSnbTnbUnbVnbWnb{C XnbYnbcT ee dT |C Znb0nbeT }C 1nb~C 2nbfT aD gT 3nb'i 4nbbD hT ji cD iT dD jT )b *b +b / : ,b eD kT fD 5nbgD 6nbhD lT iD 7nb8nb9nb!nbki #nb$nb%nb'nb(nb)nb*nb+nb,nb-nb.nb/nb:nb;nb=nb?nb@nb[nb]nb^nb_nb`nb{nb|nb}nb~nbaobbobcobdobeobfobgobhobiobjobkoblobmobnoboobpobqobrobsobtobuobvobwobxobyobzobAobBobCobDobEobFobGobHobIobJobKobLobMobNobOobPobQobRobSobTobUobVobWobmT jD XobYobZob0ob1ob2ob3ob4ob5ob6ob7ob8ob9ob!ob#ob$ob%ob'ob(ob)ob*ob+ob,ob-ob.ob/ob:ob;ob=ob?ob@ob[ob]obkD ^obfe ge qb he ie rb je ke le lD _obli mD nT nD oT mi `ob{ob|ob}oboD ~obapbbpbcpbdpbpD epbfpbpT qD gpbhpbipbjpbkpblpbmpbnpbrD ni sD qT opbppbqpbrpbspbtpbupbvpbwpbxpbypbzpbApbtD rT BpbCpbDpbEpbFpbGpbHpbIpbJpbKpbLpbMpbNpbOpbPpbQpbRpbSpbTpbUpbVpbWpbXpbuD YpbZpbvD 0pbwD 1pb2pb3pb4pb5pbxD 6pbsT yD me zD 7pb8pb9pb!pbne oe pe zb -b qe AD re se BD oi .b ; CD pi tT DD #pbuT ED $pbvT FD %pbwT GD 'pbxT HD (pbyT ID )pbzT JD *pbAT KD +pbBT LD ,pbCT MD -pbDT ND .pbET OD /pbFT PD :pb;pb=pbGT QD ?pb@pb[pbHT RD ]pb^pb_pbIT SD `pb{pbJT TD |pb}pbKT UD ~pbaqbLT VD bqbcqbMT WD dqbeqbNT XD fqbgqbOT YD hqbiqbjqbkqblqbmqbnqbZD PT oqbpqb0D QT qqbRT 1D rqbsqbtqbuqbvqbwqbST 2D xqbyqbzqbAqbBqbCqbDqb3D TT EqbFqb4D UT GqbVT 5D HqbIqbWT 6D JqbKqbXT 7D LqbMqb8D 9D !D Nqb#D OqbPqbQqbRqbSqbTqb$D UqbVqbWqb%D XqbYqbZqb0qb1qb'D 2qb3qb4qb5qb(D 6qb7qb8qb9qb!qbYT #qb)D $qb%qbte *D ZT 'qb4i +D (qb0T )qb,D 1T *qb+qb,qb-qb2T -D .qb3T .D /qb4T /D :qb5T :D ;qb=qb;D =D ?D @D ?qb[D @qb6T ]D ^D _D )F [qb`D rj 8F sj 9F tj :F ]qb^qb_qb`qb{qb|qb}qb~qbarbbrbcrb7T drberbfrbgrbhrbirbjrbkrblrbmrb{D nrborb|D prbqrbrrb8T srbtrburbvrbwrbxrbyrbzrbArbBrbCrbDrb}D Erb9T !T ~D FrbGrbHrb#T IrbJrbaE $T bE KrbcE %T Lrbn !g ue Mrb5i Nrb6i Orb7i dE PrbQrbRrb'T eE SrbTrbUrb(T fE )T gE VrbWrbXrbYrbZrb0rb1rb2rbhE 3rbiE 4rbjE 5rbkE *T lE +T mE ,T nE -T oE .T /T pE :T qE rE sE tE uE vE ;T 6rbwE xE =T 7rb?T yE zE @T AE [T 8rb9rbBE !rb]T #rbCE $rb%rb'rbDE (rb)rbEE *rb+rbFE ,rb-rb.rb/rbGE :rb;rb=rb^T HE _T IE `T JE {T KE aV LE |T ME ?rb}T NE ~T OE aU PE bU @rbcU QE [rbRE ]rbdU SE ^rbeU TE _rbfU `rb{rbUE gU hU |rbVE }rb~rbWE iU XE asbbsbcsbjU YE dsbesbfsbkU ZE gsbhsbisbjsblU 0E mU 1E nU 2E oU 3E pU 4E qU rU 5E 6E sU 7E tU 8E uU 9E vU !E wU xU #E $E yU zU %E AU 'E ksblsb(E msbBU CU )E DU *E +E EU nsb,E osbpsbqsbFU GU -E rsbssbtsbHU .E usbvsbwsb/E xsbIU :E ysbJU KU zsbAsb;E Bsb=E LU Csb?E DsbMU @E NU Esb[E FsbOU GsbHsbIsb]E PU QU JsbKsb^E LsbMsbRU Nsb_E OsbPsbSU `E QsbRsbTU SsbTsb{E UsbVsbUU |E WsbVU }E XsbYsbZsb0sbWU 1sb~E 2sb3sb4sb5sbXU aF 6sb7sb8sb9sbYU !sb#sb$sbbF %sbcF dF eF fF gF ZU hF 0U iF jF 'sb1U kF 2U lF (sb3U mF 4U 5U nF )sb6U oF *sb7U pF 8U qF 9U rF +sbsF !U ,sb-sb.sb/sbtF :sb;sb=sb#U ?sb@sb[sbuF ]sb^sb_sb$U `sb{sb|sb}sb~sbatbbtbctbdtb%U vF etbftbgtbwF 'U htbxF (U itbyF zF jtb)U ktb*U ltbqi ,g mtbve ntb+U AF otb,U ptbqtb/b rtbstbBF ttbutbvtbwtbxtbCF ytbDF ztbAtbBtbCtbDtbEF EtbFF FtbGtbGF we -U HtbHF sb ItbJtb.U KtbIF /U JF LtbMtbKF NtbOtbPtbQtbRtbLF StbMF ri xe NF TtbUtbOF ye ze Ae VtbWtbXtbYtbZtb0tb1tb2tb

1138 scope["root_path"] = self.root_path 2)iPF+iQF,iRF-i*F/iSF;iTF=iUF?i+F[iVF^iWF_iXF`i,F|iYF~iZFaj0Fbj-Fdj1Ffj2Fgj3Fhj.Fjj4Flj5Fmj6Fnj/Fpj7Frj8Fsj9Ftj:F

1139 await super().__call__(scope, receive, send) 3a uj vj wj DV xj yj zj ;F Aj EV =F ?F Bj si -g .g /g :g Cj FV GV HV @F IV JV KV Dj (i Ej :b ;b [F LV Fj ]F bV :U pV Gj =b ?b MV NV OV PV QV RV SV TV UV VV WV XV YV ZV 0V 1V 2V 3V ^F 4V 5V Hj 6V 7V 8V 9V !V #V $V %V 'V Ij ;g Jj (V Kj _F =g )V *V ti qV @b [b ]b Lj +V ,V -V .V /V :V ;V =V ?V @V [V ]V ^V Mj _V `V {V |V }V ~V aW bW cW dW eW fW gW hW iW jW Nj kW lW mW nW Oj oW pW Pj qW Qj rW sW tW Rj uW vW wW Sj xW yW zW AW BW CW DW EW FW GW HW IW JW KW LW MW NW OW Tj PW QW Uj `F RW SW TW UW Vj VW WW XW YW ZW 0W 1W 2W 3W 4W 5W 6W 7W 8W 9W !W #W $W %W 'W (W Wj )W *W Xj Yj +W ,W Zj 0j -W ^b _b 1j .W /W :W ;W =W ?W @W 2j [W ]W ^W _W `W )i PF 3j {F 4j {W |W ?g *i }W ~W aX bX cX 5j dX eX |F fX gX hX 6j iX 7j }F jX 8j @g 9j kX !j #j lX mX nX oX pX qX rX $j ~F %j o = p q r s t ? 'j aG [g (j bG )j sX *j tX +j cG uX vX wX xX yX zX AX ,j BX CX dG `b {b eG -j DX EX fG .j FX /j GX gG :j hG HX 8i IX ;j iG ]g =j jG ?j kG Ab Bb Cb u v Db @j lG [j JX ]j KX ^j mG _j LX MX NX OX ^g PX QX RX SX TX UX VX WX XX YX ZX 0X 1X 2X 3X 4X 5X 6X 7X 8X 9X !X #X $X %X 'X (X )X *X +X ,X -X .X /X :X ;X =X ?X @X [X ]X ^X _X `X {X |X }X ~X aY bY cY dY eY fY gY hY iY jY kY lY mY nY oY pY qY rY sY tY uY vY wY xY yY zY AY nG `j BY CY DY EY FY GY HY {j IY JY oG KY |j LY MY NY OY PY QY RY SY TY UY VY pG WY XY qG YY ZY 0Y 1Y 2Y 3Y }j 4Y 5Y 6Y 7Y 8Y 9Y !Y #Y $Y %Y 'Y (Y )Y *Y +Y ,Y rG ~j -Y .Y /Y :Y ;Y =Y ?Y @Y [Y ]Y ^Y sG _Y `Y {Y |Y ak }Y ~Y aZ bZ cZ dZ eZ fZ gZ hZ iZ jZ kZ lZ mZ nZ oZ pZ qZ rZ sZ tZ uZ vZ wZ xZ yZ zZ AZ BZ CZ DZ EZ FZ GZ HZ IZ JZ KZ LZ MZ NZ OZ PZ QZ bk RZ |b }b ck SZ _g dk tG ek uG `g TZ UZ VZ WZ fk XZ YZ ZZ 0Z 1Z gk 2Z 3Z vG hk 4Z 5Z 6Z 7Z 8Z 9Z !Z #Z ik {g jk wG $Z %Z 'Z (Z )Z *Z +Z ,Z -Z .Z /Z :Z ;Z kk xG =Z ?Z @Z [Z ]Z ^Z _Z `Z {Z |Z }Z ~Z a0 b0 c0 d0 e0 f0 g0 h0 i0 j0 k0 lk l0 m0 mk n0 nk o0 p0 q0 r0 s0 ok t0 yG pk ~b qk u0 v0 w0 x0 ac bc cc tb Eb dc rk ec fc Fb w sk |g zG tk y0 AG uk z0 BG vk A0 CG wk B0 DG xk C0 EG yk D0 FG zk E0 GG Ak F0 HG Bk G0 IG Ck H0 JG Dk I0 KG Ek J0 LG Fk K0 L0 M0 MG Gk N0 O0 P0 NG Hk Q0 R0 S0 OG Ik T0 U0 PG Jk V0 W0 QG Kk X0 Y0 RG Lk Z0 00 SG Mk 10 20 TG Nk 30 40 UG Ok 50 60 70 80 90 !0 #0 Pk VG $0 %0 Qk WG '0 XG Rk (0 )0 *0 +0 ,0 -0 YG Sk .0 /0 :0 ;0 =0 ?0 @0 Tk ZG [0 ]0 Uk 0G ^0 1G Vk _0 `0 2G Wk {0 |0 3G Xk }0 ~0 Yk Zk 0k a1 1k b1 c1 d1 e1 f1 g1 2k h1 i1 j1 3k k1 l1 m1 n1 o1 4k p1 q1 r1 s1 5k t1 u1 v1 w1 x1 4G y1 6k z1 A1 7k 5G B1 ui 8k C1 6G D1 9k 7G E1 F1 G1 H1 8G !k I1 9G #k J1 !G $k K1 #G %k L1 M1 'k (k )k *k N1 +k O1 $G ,k -k .k !F P1 /k +i QF ,i RF -i *F Q1 R1 S1 T1 U1 V1 W1 X1 Y1 Z1 01 %G 11 21 31 41 51 61 71 81 91 !1 :k #1 $1 ;k %1 '1 (1 'G )1 *1 +1 ,1 -1 .1 /1 :1 ;1 =1 ?1 @1 =k [1 (G )G ?k ]1 ^1 _1 *G `1 {1 @k +G [k |1 ]k ,G -G }1 h 3e gc ~1 vi a2 wi b2 xi ^k c2 d2 e2 .G _k f2 g2 h2 /G `k :G {k i2 j2 k2 l2 m2 n2 o2 p2 |k q2 }k r2 ~k s2 al ;G bl =G cl ?G dl @G el [G ]G fl ^G gl hl il jl kl ll _G t2 ml nl `G u2 {G |G ol pl }G ql ~G v2 w2 rl x2 aH y2 sl z2 A2 B2 tl C2 D2 ul E2 F2 vl G2 H2 I2 J2 wl K2 L2 M2 bH xl cH yl dH zl eH Al _U Bl fH Cl N2 gH Dl hH El iH Fl jH O2 kH Gl P2 Hl Q2 lH Il R2 mH Jl S2 nH T2 U2 Kl oH pH V2 Ll W2 X2 Ml qH Nl Y2 Z2 02 rH Ol 12 22 32 sH Pl 42 52 62 72 tH Ql uH Rl vH Sl wH Tl xH Ul yH zH Vl Wl AH Xl BH Yl CH Zl DH 0l EH FH GH 1l 2l HH IH 3l JH 4l 82 92 KH 5l !2 #2 6l $2 LH MH NH 7l OH 8l 9l PH %2 !l '2 (2 )2 QH #l RH $l SH %l TH UH 'l *2 +2 ,2 VH (l -2 .2 /2 )l :2 WH *l ;2 XH YH =2 ?2 +l @2 ,l ZH [2 -l ]2 0H .l 1H ^2 /l _2 2H `2 {2 |2 :l 3H 4H }2 ~2 ;l a3 b3 5H c3 =l d3 e3 6H ?l f3 g3 7H h3 i3 @l j3 k3 8H [l l3 9H ]l m3 n3 o3 p3 !H q3 ^l r3 s3 t3 u3 #H v3 _l w3 x3 y3 z3 $H `l A3 B3 C3 D3 %H E3 F3 G3 {l H3 |l }l ~l am bm 'H cm (H dm em I3 )H fm *H gm J3 +H hm ,H -H im K3 .H jm L3 /H km :H lm ;H mm =H nm M3 om ?H N3 O3 P3 Q3 pm R3 S3 T3 @H U3 V3 W3 qm X3 Y3 Z3 [H 03 13 23 33 43 53 63 73 83 ]H rm 93 !3 #3 sm ^H $3 tm _H %3 um vm '3 `H (3 {H )3 }g %g *3 hc +3 |H wm ,3 }H -3 .3 Gb /3 :3 xm ;3 =3 ?3 @3 [3 ym ]3 zm ^3 _3 `3 {3 |3 Am }3 ~3 Bm ~H a4 Cm @ b4 c4 aI d4 Dm bI Em e4 f4 Fm g4 h4 i4 j4 k4 Gm l4 Hm ~g ic Im m4 n4 Jm jc kc lc o4 p4 q4 r4 s4 t4 u4 v4 b Km Lm Mm w4 Nm Om Pm cI Qm x4 dI eI Rm yi ah bh ch dh Sm y4 z4 A4 fI B4 C4 D4 Tm .i Um mc nc gI E4 Vm hI cV ;U rV Wm oc pc F4 G4 H4 I4 J4 K4 L4 M4 N4 O4 P4 Q4 R4 S4 T4 U4 V4 W4 iI X4 Y4 Xm Z4 04 14 24 34 44 54 64 74 Ym eh Zm 84 0m jI fh 94 !4 zi sV qc rc sc 1m #4 $4 %4 '4 (4 )4 *4 +4 ,4 -4 .4 /4 :4 2m ;4 =4 ?4 @4 [4 ]4 ^4 _4 `4 {4 |4 }4 ~4 a5 b5 c5 3m d5 e5 f5 g5 4m h5 i5 5m j5 6m k5 l5 m5 7m n5 o5 p5 8m q5 r5 s5 t5 u5 v5 w5 x5 y5 z5 A5 B5 C5 D5 E5 F5 G5 H5 9m I5 J5 !m kI K5 L5 M5 N5 #m O5 P5 Q5 R5 S5 T5 U5 V5 W5 X5 Y5 Z5 05 15 25 35 45 55 65 75 85 $m 95 !5 %m 'm #5 $5 (m )m %5 tc uc *m '5 (5 )5 *5 +5 ,5 -5 +m .5 /5 :5 ;5 =5 /i SF ,m lI -m ?5 @5 gh :i [5 ]5 ^5 _5 `5 .m {5 |5 mI }5 ~5 a6 /m b6 :m nI c6 ;m hh =m d6 ?m @m e6 f6 g6 h6 i6 j6 k6 [m oI ]m x [ y z A B C ] ^m pI ih _m qI `m l6 {m m6 |m rI n6 o6 p6 q6 r6 s6 t6 }m u6 v6 sI vc wc tI ~m w6 x6 uI an y6 bn z6 vI cn wI A6 9i B6 dn xI jh en yI fn zI Hb Ib Jb D E Kb gn AI hn C6 in D6 jn BI kn E6 F6 G6 H6 kh I6 J6 K6 L6 M6 N6 O6 P6 Q6 R6 S6 T6 U6 V6 W6 X6 Y6 Z6 06 16 26 36 46 56 66 76 86 96 !6 #6 $6 %6 '6 (6 )6 *6 +6 ,6 -6 .6 /6 :6 ;6 =6 ?6 @6 [6 ]6 ^6 _6 `6 {6 |6 }6 ~6 a7 b7 c7 d7 e7 f7 g7 h7 i7 j7 k7 l7 m7 n7 o7 p7 q7 r7 s7 t7 CI ln u7 v7 w7 x7 y7 z7 A7 mn B7 C7 DI D7 nn E7 F7 G7 H7 I7 J7 K7 L7 M7 N7 O7 EI P7 Q7 FI R7 S7 T7 U7 V7 W7 on X7 Y7 Z7 07 17 27 37 47 57 67 77 87 97 !7 #7 $7 GI pn %7 '7 (7 )7 *7 +7 ,7 -7 .7 /7 :7 HI ;7 =7 ?7 @7 qn [7 ]7 ^7 _7 `7 {7 |7 }7 ~7 a8 b8 c8 d8 e8 f8 g8 h8 i8 j8 k8 l8 m8 n8 o8 p8 q8 r8 s8 t8 u8 v8 w8 x8 y8 z8 A8 B8 C8 D8 E8 F8 G8 H8 I8 J8 rn K8 xc yc sn L8 lh tn II un JI mh M8 N8 O8 P8 vn Q8 R8 S8 T8 U8 wn V8 W8 KI xn X8 Y8 Z8 08 18 28 38 48 yn nh zn LI 58 68 78 88 98 !8 #8 $8 %8 '8 (8 )8 *8 An MI +8 ,8 -8 .8 /8 :8 ;8 =8 ?8 @8 [8 ]8 ^8 _8 `8 {8 |8 }8 ~8 a9 b9 c9 d9 Bn e9 f9 Cn g9 Dn h9 i9 j9 k9 l9 En m9 NI Fn zc Gn n9 o9 p9 q9 Ac Bc Cc ub Lb Dc Hn Ec Fc Mb F In oh OI Jn r9 PI Kn s9 QI Ln t9 RI Mn u9 SI Nn v9 TI On w9 UI Pn x9 VI Qn y9 WI Rn z9 XI Sn A9 YI Tn B9 ZI Un C9 0I Vn D9 E9 F9 1I Wn G9 H9 I9 2I Xn J9 K9 L9 3I Yn M9 N9 4I Zn O9 P9 5I 0n Q9 R9 6I 1n S9 T9 7I 2n U9 V9 8I 3n W9 X9 9I 4n Y9 Z9 09 19 29 39 49 5n !I 59 69 6n #I 79 $I 7n 89 99 !9 #9 $9 %9 %I 8n '9 (9 )9 *9 +9 ,9 -9 9n 'I .9 /9 !n (I :9 )I #n ;9 =9 *I $n ?9 @9 +I %n [9 ]9 'n (n )n ^9 *n _9 `9 {9 |9 }9 ~9 +n a! b! c! ,n d! e! f! g! h! -n i! j! k! l! .n m! n! o! p! q! ,I r! /n s! t! :n -I u! Ai ;n v! .I w! =n /I x! y! z! A! :I ?n B! ;I @n C! =I [n D! ?I ]n E! F! ^n _n `n {n G! |n H! @I }n ~n ao #F I! bo ;i TF =i UF ?i +F J! K! L! M! N! O! P! Q! R! S! T! [I U! V! W! X! Y! Z! 0! 1! 2! 3! co 4! 5! do 6! 7! 8! ]I 9! !! #! $! %! '! (! )! *! +! ,! -! eo .! ^I _I fo /! :! ;! `I =! ?! go {I ho @! io |I }I [! i |e Gc ]! Bi ^! Ci _! Di jo `! {! |! ~I ko }! ~! a# aJ lo bJ mo b# c# d# e# f# g# h# i# no j# oo k# po l# qo cJ ro dJ so eJ to fJ uo gJ hJ vo iJ wo xo yo zo Ao Bo jJ m# Co Do kJ n# lJ mJ Eo Fo nJ Go oJ o# p# Ho q# pJ r# Io s# t# u# Jo v# w# Ko x# y# Lo z# A# B# C# Mo D# E# F# qJ No rJ Oo sJ Po tJ Qo `U Ro uJ So G# vJ To wJ Uo xJ Vo yJ H# zJ Wo I# Xo J# AJ Yo K# BJ Zo L# CJ M# N# 0o DJ EJ O# 1o P# Q# 2o FJ 3o R# S# T# GJ 4o U# V# W# HJ 5o X# Y# Z# 0# IJ 6o JJ 7o KJ 8o LJ 9o MJ !o NJ OJ #o $o PJ %o QJ 'o RJ (o SJ )o TJ UJ VJ *o +o WJ XJ ,o YJ -o 1# 2# ZJ .o 3# 4# /o 5# 0J 1J 2J :o 3J ;o =o 4J 6# ?o 7# 8# 9# 5J @o 6J [o 7J ]o 8J 9J ^o !# ## $# !J _o %# '# (# `o )# #J {o *# $J %J +# ,# |o -# }o 'J .# ~o /# (J ap )J :# bp ;# *J =# ?# @# cp +J ,J [# ]# dp ^# _# -J `# ep {# |# .J fp }# ~# /J a$ b$ gp c$ d$ :J hp e$ ;J ip f$ g$ h$ i$ =J j$ jp k$ l$ m$ n$ ?J o$ kp p$ q$ r$ s$ @J lp t$ u$ v$ w$ [J x$ y$ z$ mp A$ np op pp qp rp ]J sp ^J tp up B$ _J vp `J wp C$ {J xp |J }J yp D$ ~J zp E$ aK Ap bK Bp cK Cp dK Dp F$ Ep eK G$ H$ I$ J$ Fp K$ L$ M$ fK N$ O$ P$ Gp Q$ R$ S$ gK T$ U$ V$ W$ X$ Y$ Z$ 0$ 1$ hK Hp 2$ 3$ 4$ Ip iK 5$ Jp jK 6$ Kp Lp 7$ kK 8$ lK 9$ ph 'g !$ Hc #$ mK Mp $$ nK %$ '$ Nb ($ )$ Np *$ +$ ,$ -$ .$ Op /$ Pp :$ ;$ =$ ?$ @$ Qp [$ Rp ]$ ^$ Sp oK _$ Tp ^ `$ {$ pK |$ Up qK Vp }$ ~$ Wp a% b% c% d% e% Xp f% Yp qh Ic Zp g% h% 0p Jc Kc Lc i% j% k% l% m% n% o% p% c 1p 2p 3p q% 4p 5p 6p rK 7p r% sK tK 8p Ei rh sh th uh 9p s% t% u% uK v% w% x% !p @i #p Mc Nc vK y% $p wK dV =U tV %p Oc Pc z% A% B% C% D% E% F% G% H% I% J% K% L% M% N% O% P% Q% xK R% S% 'p T% U% V% W% X% Y% Z% 0% 1% (p vh )p 2% *p yK wh 3% 4% Fi uV Qc Rc Sc +p 5% 6% 7% 8% 9% !% #% $% %% '% (% )% *% ,p +% ,% -% .% /% :% ;% =% ?% @% [% ]% ^% _% `% {% -p |% }% ~% a' .p b' c' /p d' :p e' f' g' ;p h' i' j' =p k' l' m' n' o' p' q' r' s' t' u' v' w' x' y' z' A' B' ?p C' D' @p zK E' F' G' H' [p I' J' K' L' M' N' O' P' Q' R' S' T' U' V' W' X' Y' Z' 0' 1' 2' ]p 3' 4' ^p _p 5' 6' `p {p 7' Tc Uc |p 8' 9' !' #' $' %' '' }p (' )' *' +' ,' [i VF ~p AK aq -' .' xh ]i /' :' ;' =' ?' bq @' [' BK ]' ^' _' cq `' dq CK {' eq yh fq |' gq hq }' ~' a( b( c( d( e( iq DK jq G _ H I J K L ` kq EK zh lq FK mq f( nq g( oq GK h( i( j( k( l( m( n( pq o( p( HK Vc Wc IK qq q( r( JK rq s( sq t( KK tq LK u( !i v( uq MK Ah vq NK wq OK Ob Pb Qb M N Rb xq PK yq w( zq x( Aq QK Bq y( z( A( B( Bh C( D( E( F( G( H( I( J( K( L( M( N( O( P( Q( R( S( T( U( V( W( X( Y( Z( 0( 1( 2( 3( 4( 5( 6( 7( 8( 9( !( #( $( %( '( (( )( *( +( ,( -( .( /( :( ;( =( ?( @( [( ]( ^( _( `( {( |( }( ~( a) b) c) d) e) f) g) h) i) j) k) l) m) n) RK Cq o) p) q) r) s) t) u) Dq v) w) SK x) Eq y) z) A) B) C) D) E) F) G) H) I) TK J) K) UK L) M) N) O) P) Q) Fq R) S) T) U) V) W) X) Y) Z) 0) 1) 2) 3) 4) 5) 6) VK Gq 7) 8) 9) !) #) $) %) ') () )) *) WK +) ,) -) .) Hq /) :) ;) =) ?) @) [) ]) ^) _) `) {) |) }) ~) a* b* c* d* e* f* g* h* i* j* k* l* m* n* o* p* q* r* s* t* u* v* w* x* y* z* A* B* C* D* Iq E* Xc Yc Zc { 0c 1c | 2c 3c 4c Jq F* Ch Kq XK Lq YK Dh G* H* I* J* Mq K* L* M* N* O* Nq P* Q* ZK Oq R* S* T* U* V* W* X* Y* Pq Eh Qq 0K Z* 0* 1* 2* 3* 4* 5* 6* 7* 8* 9* !* #* Rq 1K $* %* '* (* )* ** +* ,* -* .* /* :* ;* =* ?* @* [* ]* ^* _* `* {* |* Sq }* ~* Tq a+ Uq b+ c+ d+ e+ f+ Vq g+ 2K Wq 5c Xq h+ i+ j+ k+ 6c 7c 8c vb Sb 9c Yq !c #c Zq Fh Tb O 0q Gh 3K 1q l+ 4K 2q m+ 5K 3q n+ 6K 4q o+ 7K 5q p+ 8K 6q q+ 9K 7q r+ !K 8q s+ #K 9q t+ $K !q u+ %K #q v+ 'K $q w+ (K %q x+ y+ z+ )K 'q A+ B+ C+ *K (q D+ E+ F+ +K )q G+ H+ ,K *q I+ J+ -K +q K+ L+ .K ,q M+ N+ /K -q O+ P+ :K .q Q+ R+ ;K /q S+ T+ U+ V+ W+ X+ Y+ :q =K Z+ 0+ ;q ?K 1+ @K =q 2+ 3+ 4+ 5+ 6+ 7+ [K ?q 8+ 9+ !+ #+ $+ %+ '+ @q ]K (+ )+ [q ^K *+ _K ]q ++ ,+ `K ^q -+ .+ {K _q /+ :+ `q {q |q ;+ }q =+ ?+ @+ [+ ]+ ^+ ~q _+ `+ {+ ar |+ }+ ~+ a, b, br c, d, e, f, cr g, h, i, j, k, |K l, dr m, n, $c er }K o, Gi fr p, ~K q, gr aL r, s, t, u, bL hr v, cL ir w, dL jr x, eL kr y, z, lr mr nr or A, pr B, fL qr rr sr $F C, tr ^i WF _i XF `i ,F D, E, F, G, H, I, J, K, L, M, N, gL O, P, Q, R, S, T, U, V, W, X, ur Y, Z, vr 0, 1, 2, hL 3, 4, 5, 6, 7, 8, 9, !, #, $, %, ', wr (, iL jL xr ), *, +, kL ,, -, yr lL zr ., Ar mL nL /, j Cf %c :, Hi ;, Ii =, Ji Br ?, @, [, oL Cr ], ^, _, pL Dr qL Er `, {, |, }, ~, a- b- c- Fr d- Gr e- Hr f- Ir rL Jr sL Kr tL Lr uL Mr vL wL Nr xL Or Pr Qr Rr Sr Tr yL g- Ur Vr zL h- AL BL Wr Xr CL Yr DL i- j- Zr k- EL l- 0r m- n- o- 1r p- q- 2r r- s- 3r t- u- v- w- 4r x- y- z- FL 5r GL 6r HL 7r IL 8r {U 9r JL !r A- KL #r LL $r ML %r NL B- OL 'r C- (r D- PL )r E- QL *r F- RL G- H- +r SL TL I- ,r J- K- -r UL .r L- M- N- VL /r O- P- Q- WL :r R- S- T- U- XL ;r YL =r ZL ?r 0L @r 1L [r 2L 3L ]r ^r 4L _r 5L `r 6L {r 7L |r 8L 9L !L }r ~r #L $L as %L bs V- W- 'L cs X- Y- ds Z- (L )L *L es +L fs gs ,L 0- hs 1- 2- 3- -L is .L js /L ks :L ;L ls 4- 5- 6- =L ms 7- 8- 9- ns !- ?L os #- @L [L $- %- ps '- qs ]L (- rs )- ^L ss _L *- ts +- `L ,- -- .- us {L |L /- :- vs ;- =- }L ?- ws @- [- ~L xs ]- ^- aM _- `- ys {- |- bM zs }- cM As ~- a. b. c. dM d. Bs e. f. g. h. eM i. Cs j. k. l. m. fM Ds n. o. p. q. gM r. s. t. Es u. Fs Gs Hs Is Js hM Ks iM Ls Ms v. jM Ns kM Os w. lM Ps mM nM Qs x. oM Rs y. pM Ss qM Ts rM Us sM Vs z. Ws tM A. B. C. D. Xs E. F. G. uM H. I. J. Ys K. L. M. vM N. O. P. Q. R. S. T. U. V. wM Zs W. X. Y. 0s xM Z. 1s yM 0. 2s 3s 1. zM 2. AM 3. Hh (g 4. 'c 5. BM 4s 6. CM 7. 8. Ub 9. !. 5s #. $. %. '. (. 6s ). 7s *. +. ,. -. .. 8s /. 9s :. ;. !s (c DM =. #s } ?. @. EM [. $s FM %s ]. ^. 's _. `. {. |. }. (s ~. )s Ih )c *s a/ b/ +s *c +c ,c c/ d/ e/ f/ g/ h/ i/ j/ d ,s -s .s k/ /s :s ;s GM =s l/ HM IM ?s Ki Jh Kh Lh Mh @s m/ n/ o/ JM p/ q/ r/ [s {i ]s -c .c KM s/ ^s LM eV ?U vV _s /c :c t/ u/ v/ w/ x/ y/ z/ A/ B/ C/ D/ E/ F/ G/ H/ I/ J/ K/ MM L/ M/ `s N/ O/ P/ Q/ R/ S/ T/ U/ V/ {s Nh |s W/ }s NM Oh X/ Y/ Li wV ;c =c ?c ~s Z/ 0/ 1/ 2/ 3/ 4/ 5/ 6/ 7/ 8/ 9/ !/ #/ at $/ %/ '/ (/ )/ */ +/ ,/ -/ ./ // :/ ;/ =/ ?/ @/ bt [/ ]/ ^/ _/ ct `/ {/ dt |/ et }/ ~/ a: ft b: c: d: gt e: f: g: h: i: j: k: l: m: n: o: p: q: r: s: t: u: v: ht w: x: it OM y: z: A: B: jt C: D: E: F: G: H: I: J: K: L: M: N: O: P: Q: R: S: T: U: V: W: kt X: Y: lt mt Z: 0: nt ot 1: @c [c pt 2: 3: 4: 5: 6: 7: 8: qt 9: !: #: $: %: |i YF rt PM st ': (: Ph }i ): *: +: ,: -: tt .: /: QM :: ;: =: ut ?: vt RM @: wt Qh xt [: yt zt ]: ^: _: `: {: |: }: At SM Bt P ~ Q R S T U ab Ct TM Rh Dt UM Et ~: Ft a; Gt VM b; c; d; e; f; g; h; Ht i; j; WM ]c ^c XM It k; l; YM Jt m; Kt n; ZM Lt 0M o; #i p; Mt 1M Sh Nt 2M Ot 3M Vb Wb Xb V W Yb Pt 4M Qt q; Rt r; St 5M Tt s; t; u; v; Th w; x; y; z; A; B; C; D; E; F; G; H; I; J; K; L; M; N; O; P; Q; R; S; T; U; V; W; X; Y; Z; 0; 1; 2; 3; 4; 5; 6; 7; 8; 9; !; #; $; %; '; (; ); *; +; ,; -; .; /; :; ;; =; ?; @; [; ]; ^; _; `; {; |; }; ~; a= b= c= d= e= f= g= h= 6M Ut i= j= k= l= m= n= o= Vt p= q= 7M r= Wt s= t= u= v= w= x= y= z= A= B= C= 8M D= E= 9M F= G= H= I= J= K= Xt L= M= N= O= P= Q= R= S= T= U= V= W= X= Y= Z= 0= !M Yt 1= 2= 3= 4= 5= 6= 7= 8= 9= != #= #M $= %= '= (= Zt )= *= += ,= -= .= /= := ;= == ?= @= [= ]= ^= _= `= {= |= }= ~= a? b? c? d? e? f? g? h? i? j? k? l? m? n? o? p? q? r? s? t? u? v? w? x? 0t y? _c `c {c bb |c }c cb ~c ad bd 1t z? Uh 2t $M 3t %M Vh A? B? C? D? 4t E? F? G? H? I? 5t J? K? 'M 6t L? M? N? O? P? Q? R? S? 7t Wh 8t (M T? U? V? W? X? Y? Z? 0? 1? 2? 3? 4? 5? 9t )M 6? 7? 8? 9? !? #? $? %? '? (? )? *? +? ,? -? .? /? :? ;? =? ?? @? [? !t ]? ^? #t _? $t `? {? |? }? ~? %t a@ *M 't cd (t b@ c@ d@ e@ dd ed fd wb Zb gd )t hd id *t Xh 0b X +t Yh +M ,t f@ ,M -t g@ -M .t h@ .M /t i@ /M :t j@ :M ;t k@ ;M =t l@ =M ?t m@ ?M @t n@ @M [t o@ [M ]t p@ ]M ^t q@ ^M _t r@ s@ t@ _M `t u@ v@ w@ `M {t x@ y@ z@ {M |t A@ B@ |M }t C@ D@ }M ~t E@ F@ ~M au G@ H@ aN bu I@ J@ bN cu K@ L@ cN du M@ N@ O@ P@ Q@ R@ S@ eu dN T@ U@ fu eN V@ fN gu W@ X@ Y@ Z@ 0@ 1@ gN hu 2@ 3@ 4@ 5@ 6@ 7@ 8@ iu hN 9@ !@ ju iN #@ jN ku $@ %@ kN lu '@ (@ lN mu )@ *@ nu ou pu +@ qu ,@ -@ .@ /@ :@ ;@ ru =@ ?@ @@ su [@ ]@ ^@ _@ `@ tu {@ |@ }@ ~@ uu a[ b[ c[ d[ e[ mN f[ vu g[ h[ jd wu nN i[ Mi xu j[ oN k[ yu pN l[ m[ n[ o[ qN zu p[ rN Au q[ sN Bu r[ tN Cu s[ t[ Du Eu Fu Gu u[ Hu v[ uN Iu Ju Ku %F w[ Lu ~i ZF aj 0F bj -F x[ y[ z[ A[ B[ C[ D[ E[ F[ G[ H[ vN I[ J[ K[ L[ M[ N[ O[ P[ Q[ R[ Mu S[ T[ Nu U[ V[ W[ wN X[ Y[ Z[ 0[ 1[ 2[ 3[ 4[ 5[ 6[ 7[ 8[ Ou 9[ xN yN Pu ![ #[ $[ zN %[ '[ Qu AN Ru ([ Su BN CN )[ k 7f kd *[ Ni +[ Oi ,[ Pi Tu -[ .[ /[ DN Uu :[ ;[ =[ EN Vu FN Wu ?[ @[ [[ ][ ^[ _[ `[ {[ Xu |[ Yu }[ Zu ~[ 0u GN 1u HN 2u IN 3u JN 4u KN LN 5u MN 6u 7u 8u 9u !u #u NN a] $u %u ON b] PN QN 'u (u RN )u SN c] d] *u e] TN f] +u g] h] i] ,u j] k] -u l] m] .u n] o] p] q] /u r] s] t] UN :u VN ;u WN =u XN ?u |U @u YN [u u] ZN ]u 0N ^u 1N _u 2N v] 3N `u w] {u x] 4N |u y] 5N }u z] 6N A] B] ~u 7N 8N C] av D] E] bv 9N cv F] G] H] !N dv I] J] K] #N ev L] M] N] O] $N fv %N gv 'N hv (N iv )N jv *N +N kv lv ,N mv -N nv .N ov /N pv :N ;N =N qv rv ?N @N sv [N tv P] Q] ]N uv R] S] vv T] ^N _N `N wv {N xv yv |N U] zv V] W] X] }N Av ~N Bv aO Cv bO cO Dv Y] Z] 0] dO Ev 1] 2] 3] Fv 4] eO Gv 5] fO gO 6] 7] Hv 8] Iv hO 9] Jv !] iO Kv jO #] Lv $] kO %] '] (] Mv lO mO )] *] Nv +] ,] nO -] Ov .] /] oO Pv :] ;] pO =] ?] Qv @] [] qO Rv ]] rO Sv ^] _] `] {] sO |] Tv }] ~] a^ b^ tO c^ Uv d^ e^ f^ g^ uO Vv h^ i^ j^ k^ vO l^ m^ n^ Wv o^ Xv Yv Zv 0v 1v wO 2v xO 3v 4v p^ yO 5v zO 6v q^ AO 7v BO CO 8v r^ DO 9v s^ EO !v FO #v GO $v HO %v t^ 'v IO u^ v^ w^ x^ (v y^ z^ A^ JO B^ C^ D^ )v E^ F^ G^ KO H^ I^ J^ K^ L^ M^ N^ O^ P^ LO *v Q^ R^ S^ +v MO T^ ,v NO U^ -v .v V^ OO W^ PO X^ Zh )g Y^ ld Z^ QO /v 0^ RO 1^ 2^ 1b 3^ 4^ :v 5^ 6^ 7^ 8^ 9^ ;v !^ =v #^ $^ %^ '^ (^ ?v )^ @v *^ +^ [v md SO ,^ ]v db -^ .^ TO /^ ^v UO _v :^ ;^ `v =^ ?^ @^ [^ ]^ {v ^^ |v 0h nd }v _^ `^ ~v od pd qd {^ |^ }^ ~^ a_ b_ c_ d_ e aw bw cw e_ dw ew fw VO gw f_ WO XO hw Qi 1h 2h 3h 4h iw g_ h_ i_ YO j_ k_ l_ jw cj kw rd sd ZO m_ lw 0O fV @U xV mw td ud n_ o_ p_ q_ r_ s_ t_ u_ v_ w_ x_ y_ z_ A_ B_ C_ D_ E_ 1O F_ G_ nw H_ I_ J_ K_ L_ M_ N_ O_ P_ ow 5h pw Q_ qw 2O 6h R_ S_ Ri yV vd wd xd rw T_ U_ V_ W_ X_ Y_ Z_ 0_ 1_ 2_ 3_ 4_ 5_ sw 6_ 7_ 8_ 9_ !_ #_ $_ %_ '_ (_ )_ *_ +_ ,_ -_ ._ tw /_ :_ ;_ =_ uw ?_ @_ vw [_ ww ]_ ^_ __ xw `_ {_ |_ yw }_ ~_ a` b` c` d` e` f` g` h` i` j` k` l` m` n` o` p` zw q` r` Aw 3O s` t` u` v` Bw w` x` y` z` A` B` C` D` E` F` G` H` I` J` K` L` M` N` O` P` Q` Cw R` S` Dw Ew T` U` Fw Gw V` yd zd Hw W` X` Y` Z` 0` 1` 2` Iw 3` 4` 5` 6` 7` dj 1F Jw 4O Kw 8` 9` 7h ej !` #` $` %` '` Lw (` )` 5O *` +` ,` Mw -` Nw 6O .` Ow 8h Pw /` Qw Rw :` ;` =` ?` @` [` ]` Sw 7O Tw Y eb Z 0 1 2 3 fb Uw 8O 9h Vw 9O Ww ^` Xw _` Yw !O `` {` |` }` ~` a{ b{ Zw c{ d{ #O Ad Bd $O 0w e{ f{ %O 1w g{ 2w h{ 'O 3w (O i{ $i j{ 4w )O !h 5w *O 6w +O 2b 3b 4b 4 5 5b 7w ,O 8w k{ 9w l{ !w -O #w m{ n{ o{ p{ #h q{ r{ s{ t{ u{ v{ w{ x{ y{ z{ A{ B{ C{ D{ E{ F{ G{ H{ I{ J{ K{ L{ M{ N{ O{ P{ Q{ R{ S{ T{ U{ V{ W{ X{ Y{ Z{ 0{ 1{ 2{ 3{ 4{ 5{ 6{ 7{ 8{ 9{ !{ #{ ${ %{ '{ ({ ){ *{ +{ ,{ -{ .{ /{ :{ ;{ ={ ?{ @{ [{ ]{ ^{ _{ `{ {{ |{ }{ ~{ a| b| .O $w c| d| e| f| g| h| i| %w j| k| /O l| 'w m| n| o| p| q| r| s| t| u| v| w| :O x| y| ;O z| A| B| C| D| E| (w F| G| H| I| J| K| L| M| N| O| P| Q| R| S| T| U| =O )w V| W| X| Y| Z| 0| 1| 2| 3| 4| 5| ?O 6| 7| 8| 9| *w !| #| $| %| '| (| )| *| +| ,| -| .| /| :| ;| =| ?| @| [| ]| ^| _| `| {| || }| ~| a} b} c} d} e} f} g} h} i} j} k} l} m} n} o} p} q} r} +w s} Cd Dd Ed gb Fd Gd hb Hd Id Jd ,w t} $h -w @O .w [O %h u} v} w} x} /w y} z} A} B} C} :w D} E} ]O ;w F} G} H} I} J} K} L} M} =w 'h ?w ^O N} O} P} Q} R} S} T} U} V} W} X} Y} Z} @w _O 0} 1} 2} 3} 4} 5} 6} 7} 8} 9} !} #} $} %} '} (} )} *} +} ,} -} .} /} [w :} ;} ]w =} ^w ?} @} [} ]} ^} _w _} `O `w Kd {w `} {} |} }} Ld Md Nd xb 6b Od |w Pd Qd }w (h 7b 6 ~w )h {O ax ~} |O bx a~ }O cx b~ ~O dx c~ aP ex d~ bP fx e~ cP gx f~ dP hx g~ eP ix h~ fP jx i~ gP kx j~ hP lx k~ iP mx l~ m~ n~ jP nx o~ p~ q~ kP ox r~ s~ t~ lP px u~ v~ mP qx w~ x~ nP rx y~ z~ oP sx A~ B~ pP tx C~ D~ qP ux E~ F~ rP vx G~ H~ I~ J~ K~ L~ M~ wx sP N~ O~ xx tP P~ uP yx Q~ R~ S~ T~ U~ V~ vP zx W~ X~ Y~ Z~ 0~ 1~ 2~ Ax wP 3~ 4~ Bx xP 5~ yP Cx 6~ 7~ zP Dx 8~ 9~ AP Ex !~ #~ Fx Gx Hx $~ Ix %~ '~ (~ )~ *~ +~ Jx ,~ -~ .~ Kx /~ :~ ;~ =~ ?~ Lx @~ [~ ]~ ^~ Mx _~ `~ {~ |~ }~ BP ~~ Nx aabbabRd Ox CP cabSi Px dabDP eabQx EP fabgabhabiabFP Rx jabGP Sx kabHP Tx labIP Ux mabnabVx Wx Xx Yx oabZx pabJP 0x 1x 2x 'F qab3x fj 2F gj 3F hj .F rabsabtabuabvabwabxabyabzabAabBabKP CabDabEabFabGabHabIabJabKabLab4x MabNab5x OabPabQabLP RabSabTabUabVabWabXabYabZab0ab1ab2ab6x 3abMP NP 7x 4ab5ab6abOP 7ab8ab8x PP 9x 9ab!x QP RP !abl bg Sd #abTi $abUi %abVi #x 'ab(ab)abSP $x *ab+ab,abTP %x UP 'x -ab.ab/ab:ab;ab=ab?ab@ab(x [ab)x ]ab*x ^ab+x VP ,x WP -x XP .x YP /x ZP 0P :x 1P ;x =x ?x @x [x ]x 2P _ab^x _x 3P `ab4P 5P `x {x 6P |x 7P {ab|ab}x }ab8P ~ab~x abbbbbcbbay dbbebbby fbbgbbcy hbbibbjbbkbbdy lbbmbbnbb9P ey !P fy #P gy $P hy }U iy %P jy obb'P ky (P ly )P my *P pbb+P ny qbboy rbb,P py sbb-P qy tbb.P ubbvbbry /P :P wbbsy xbbybbty ;P uy zbbAbbBbb=P vy CbbDbbEbb?P wy FbbGbbHbbIbb@P xy [P yy ]P zy ^P Ay _P By `P {P Cy Dy |P Ey }P Fy ~P Gy aQ Hy bQ cQ dQ Iy Jy eQ fQ Ky gQ Ly JbbKbbhQ My LbbMbbNy NbbiQ jQ kQ Oy lQ Py Qy mQ ObbRy PbbQbbRbbnQ Sy oQ Ty pQ Uy qQ rQ Vy SbbTbbUbbsQ Wy VbbWbbXbbXy YbbtQ Yy ZbbuQ vQ 0bb1bbZy 2bb0y wQ 3bb1y 4bbxQ 2y yQ 5bb3y 6bbzQ 7bb8bb9bb4y AQ BQ !bb#bb5y $bb%bbCQ 'bb6y (bb)bbDQ 7y *bb+bbEQ ,bb-bb8y .bb/bbFQ 9y :bbGQ !y ;bb=bb?bb@bbHQ [bb#y ]bb^bb_bb`bbIQ {bb$y |bb}bb~bbacbJQ %y bcbccbdcbecbKQ fcbgcbhcb'y icb(y )y *y +y ,y LQ -y MQ .y /y jcbNQ :y OQ ;y kcbPQ =y QQ RQ ?y lcbSQ @y mcbTQ [y UQ ]y VQ ^y WQ _y ncb`y XQ ocbpcbqcbrcb{y scbtcbucbYQ vcbwcbxcb|y ycbzcbAcbZQ BcbCcbDcbEcbFcbGcbHcbIcbJcb0Q }y KcbLcbMcb~y 1Q Ncbaz 2Q Ocbbz cz Pcb3Q Qcb4Q Rcb*h *g ScbTd Tcb5Q dz Ucb6Q VcbWcb8b XcbYcbez Zcb0cb1cb2cb3cbfz 4cbgz 5cb6cb7cb8cb9cbhz !cbiz #cb$cbjz Ud 7Q %cbkz ib 'cb(cb8Q )cblz 9Q mz *cb+cbnz ,cb-cb.cb/cb:cboz ;cbpz +h Vd qz =cb?cbrz Wd Xd Yd @cb[cb]cb^cb_cb`cb{cb|cbf sz tz uz }cbvz wz xz !Q yz ~cb#Q $Q zz Wi ,h -h .h /h Az adbbdbcdb%Q ddbedbfdbBz ij Cz Zd 0d 'Q gdbDz (Q gV [U zV Ez 1d 2d hdbidbjdbkdbldbmdbndbodbpdbqdbrdbsdbtdbudbvdbwdbxdbydb)Q zdbAdbFz BdbCdbDdbEdbFdbGdbHdbIdbJdbGz :h Hz KdbIz *Q ;h LdbMdbXi AV 3d 4d 5d Jz NdbOdbPdbQdbRdbSdbTdbUdbVdbWdbXdbYdbZdbKz 0db1db2db3db4db5db6db7db8db9db!db#db$db%db'db(dbLz )db*db+db,dbMz -db.dbNz /dbOz :db;db=dbPz ?db@db[dbQz ]db^db_db`db{db|db}db~dbaebbebcebdebeebfebgebhebiebjebRz keblebSz +Q mebneboebpebTz qebrebsebtebuebvebwebxebyebzebAebBebCebDebEebFebGebHebIebJebKebUz LebMebVz Wz NebOebXz Yz Peb6d 7d Zz QebRebSebTebUebVebWeb0z XebYebZeb0eb1ebjj 4F 1z ,Q 2z 2eb3eb=h kj 4eb5eb6eb7eb8eb3z 9eb!eb-Q #eb$eb%eb4z 'eb5z .Q (eb6z ?h 7z )eb8z 9z *eb+eb,eb-eb.eb/eb:eb!z /Q #z 7 jb 8 9 ! # $ kb $z :Q @h %z ;Q 'z ;eb(z =eb)z =Q ?eb@eb[eb]eb^eb_eb`eb*z {eb|eb?Q 8d 9d @Q +z }eb~eb[Q ,z afb-z bfb]Q .z ^Q cfb%i dfb/z _Q [h :z `Q ;z {Q 9b !b #b % ' $b =z |Q ?z efb@z ffb[z }Q ]z gfbhfbifbjfb]h kfblfbmfbnfbofbpfbqfbrfbsfbtfbufbvfbwfbxfbyfbzfbAfbBfbCfbDfbEfbFfbGfbHfbIfbJfbKfbLfbMfbNfbOfbPfbQfbRfbSfbTfbUfbVfbWfbXfbYfbZfb0fb1fb2fb3fb4fb5fb6fb7fb8fb9fb!fb#fb$fb%fb'fb(fb)fb*fb+fb,fb-fb.fb/fb:fb;fb=fb?fb@fb[fb]fb^fb_fb`fb~Q ^z {fb|fb}fb~fbagbbgbcgb_z dgbegbaR fgb`z ggbhgbigbjgbkgblgbmgbngbogbpgbqgbbR rgbsgbcR tgbugbvgbwgbxgbygb{z zgbAgbBgbCgbDgbEgbFgbGgbHgbIgbJgbKgbLgbMgbNgbOgbdR |z PgbQgbRgbSgbTgbUgbVgbWgbXgbYgbZgbeR 0gb1gb2gb3gb}z 4gb5gb6gb7gb8gb9gb!gb#gb$gb%gb'gb(gb)gb*gb+gb,gb-gb.gb/gb:gb;gb=gb?gb@gb[gb]gb^gb_gb`gb{gb|gb}gb~gbahbbhbchbdhbehbfhbghbhhbihbjhbkhblhb~z mhb!d #d $d lb %d 'd mb (d )d *d aA nhb^h bA fR cA gR _h ohbphbqhbrhbdA shbthbuhbvhbwhbeA xhbyhbhR fA zhbAhbBhbChbDhbEhbFhbGhbgA `h hA iR HhbIhbJhbKhbLhbMhbNhbOhbPhbQhbRhbShbThbiA jR UhbVhbWhbXhbYhbZhb0hb1hb2hb3hb4hb5hb6hb7hb8hb9hb!hb#hb$hb%hb'hb(hb)hbjA *hb+hbkA ,hblA -hb.hb/hb:hb;hbmA =hbkR nA +d oA ?hb@hb[hb]hb,d -d .d yb %b /d pA :d ;d qA {h 'b ( rA |h lR sA ^hbmR tA _hbnR uA `hboR vA {hbpR wA |hbqR xA }hbrR yA ~hbsR zA aibtR AA bibuR BA cibvR CA dibwR DA eibxR EA fibgibhibyR FA iibjibkibzR GA libmibnibAR HA oibpibBR IA qibribCR JA sibtibDR KA uibvibER LA wibxibFR MA yibzibGR NA AibBibCibDibEibFibGibOA HR HibIibPA IR JibJR QA KibLibMibNibOibPibKR RA QibRibSibTibUibVibWibSA LR XibYibTA MR ZibNR UA 0ib1ibOR VA 2ib3ibPR WA 4ib5ibXA YA ZA 6ib0A 7ib8ib9ib!ib#ib$ib1A %ib'ib(ib2A )ib*ib+ib,ib-ib3A .ib/ib:ib;ib4A =ib?ib@ib[ib]ibQR ^ib5A _ib`ib=d 6A RR {ibYi 7A |ibSR }ib8A TR ~ibajbbjbcjbUR 9A djbVR !A ejbWR #A fjbXR $A gjbhjb%A 'A (A )A ijb*A jjbYR +A ,A -A (F kjb.A lj 5F mj 6F nj /F ljbmjbnjbojbpjbqjbrjbsjbtjbujbvjbZR wjbxjbyjbzjbAjbBjbCjbDjbEjbFjb/A GjbHjb:A IjbJjbKjb0R LjbMjbNjbOjbPjbQjbRjbSjbTjbUjbVjbWjb;A Xjb1R 2R =A YjbZjb0jb3R 1jb2jb?A 4R @A 3jb[A 5R 6R 4jbm Gg ?d 5jbZi 6jb0i 7jb1i ]A 8jb9jb!jb7R ^A #jb$jb%jb8R _A 9R `A 'jb(jb)jb*jb+jb,jb-jb.jb{A /jb|A :jb}A ;jb~A !R aB #R bB $R cB %R dB 'R (R eB )R fB gB hB iB jB kB *R =jblB mB +R ?jb,R -R nB oB .R pB /R @jb[jbqB ]jb:R ^jbrB _jb`jb{jbsB |jb}jbtB ~jbakbuB bkbckbdkbekbvB fkbgkbhkb;R wB =R xB ?R yB @R zB ~U AB [R BB ikb]R CB ^R DB _R EB `R jkb{R FB kkbGB lkb|R HB mkb}R IB nkb~R okbpkbJB aS bS qkbKB rkbskbLB cS MB tkbukbvkbdS NB wkbxkbykbeS OB zkbAkbBkbCkbfS PB gS QB hS RB iS SB jS TB kS lS UB VB mS WB nS XB oS YB pS ZB qS rS sS 0B 1B tS uS 2B vS 3B DkbEkbwS 4B FkbGkb5B HkbxS yS zS 6B AS 7B 8B BS Ikb9B JkbKkbLkbCS !B DS #B ES $B FS GS %B MkbNkbOkbHS 'B PkbQkbRkb(B SkbIS )B TkbJS KS UkbVkb*B Wkb+B LS Xkb,B YkbMS -B NS Zkb.B 0kbOS 1kb2kb3kb/B PS QS 4kb5kb:B 6kb7kbRS 8kb;B 9kb!kbSS =B #kb$kbTS %kb'kb?B (kb)kbUS @B *kbVS [B +kb,kb-kb.kbWS /kb]B :kb;kb=kb?kbXS @kb^B [kb]kb^kb_kbYS _B `kb{kb|kb}kbZS ~kbalbblb`B clb{B |B }B ~B aC 0S bC 1S cC dC dlb2S eC 3S fC elb4S gC 5S 6S hC flb7S iC glb8S jC 9S kC !S lC #S mC hlbnC $S ilbjlbklbllboC mlbnlbolb%S plbqlbrlbpC slbtlbulb'S vlbwlbxlbylbzlbAlbBlbClbDlb(S qC ElbFlbGlbrC )S HlbsC *S IlbtC uC Jlb+S Klb,S Llb}h +g Mlb@d Nlb-S vC Olb.S PlbQlb(b RlbSlbwC TlbUlbVlbWlbXlbxC YlbyC Zlb0lb1lb2lb3lbzC 4lbAC 5lb6lbBC [d /S 7lbCC nb 8lb9lb:S !lbDC ;S EC #lb$lbFC %lb'lb(lb)lb*lbGC +lbHC ~h ]d IC ,lb-lbJC ^d _d `d .lb/lb:lb;lb=lb?lb@lb[lbg KC LC MC ]lbNC OC PC =S QC ^lb?S @S RC 2i ai bi ci di SC _lb`lb{lb[S |lb}lb~lbTC oj UC {d |d ]S ambVC ^S hV ]U BV WC }d ~d XC ei YC bmbZC _S fi cmbdmb3i CV ae be 0C embfmbgmbhmbimbjmbkmblmbmmbnmbombpmbqmb1C rmbsmbtmbumbvmbwmbxmbymbzmbAmbBmbCmbDmbEmbFmbGmb2C HmbImbJmbKmb3C LmbMmb4C Nmb5C OmbPmbQmb6C RmbSmbTmb7C UmbVmbWmbXmbYmbZmb0mb1mb2mb3mb4mb5mb6mb7mb8mb9mb!mb#mb8C $mb%mb9C `S 'mb(mb)mb*mb!C +mb,mb-mb.mb/mb:mb;mb=mb?mb@mb[mb]mb^mb_mb`mb{mb|mb}mb~mbanbbnb#C cnbdnb$C %C enbfnb'C (C gnbce de )C hnbinbjnbknblnbmnbnnb*C onbpnbqnbrnbsnbpj 7F +C {S ,C tnbunbgi qj vnbwnbxnbynbznb-C AnbBnb|S CnbDnbEnb.C Fnb/C hi :C Gnb;C =C HnbInbJnbKnbLnbMnbNnb?C }S @C ) ob * + , - . pb [C ~S ii ]C aT ^C Onb_C Pnb`C bT QnbRnbSnbTnbUnbVnbWnb{C XnbYnbcT ee dT |C Znb0nbeT }C 1nb~C 2nbfT aD gT 3nb'i 4nbbD hT ji cD iT dD jT )b *b +b / : ,b eD kT fD 5nbgD 6nbhD lT iD 7nb8nb9nb!nbki #nb$nb%nb'nb(nb)nb*nb+nb,nb-nb.nb/nb:nb;nb=nb?nb@nb[nb]nb^nb_nb`nb{nb|nb}nb~nbaobbobcobdobeobfobgobhobiobjobkoblobmobnoboobpobqobrobsobtobuobvobwobxobyobzobAobBobCobDobEobFobGobHobIobJobKobLobMobNobOobPobQobRobSobTobUobVobWobmT jD XobYobZob0ob1ob2ob3ob4ob5ob6ob7ob8ob9ob!ob#ob$ob%ob'ob(ob)ob*ob+ob,ob-ob.ob/ob:ob;ob=ob?ob@ob[ob]obkD ^obfe ge qb he ie rb je ke le lD _obli mD nT nD oT mi `ob{ob|ob}oboD ~obapbbpbcpbdpbpD epbfpbpT qD gpbhpbipbjpbkpblpbmpbnpbrD ni sD qT opbppbqpbrpbspbtpbupbvpbwpbxpbypbzpbApbtD rT BpbCpbDpbEpbFpbGpbHpbIpbJpbKpbLpbMpbNpbOpbPpbQpbRpbSpbTpbUpbVpbWpbXpbuD YpbZpbvD 0pbwD 1pb2pb3pb4pb5pbxD 6pbsT yD me zD 7pb8pb9pb!pbne oe pe zb -b qe AD re se BD oi .b ; CD pi tT DD #pbuT ED $pbvT FD %pbwT GD 'pbxT HD (pbyT ID )pbzT JD *pbAT KD +pbBT LD ,pbCT MD -pbDT ND .pbET OD /pbFT PD :pb;pb=pbGT QD ?pb@pb[pbHT RD ]pb^pb_pbIT SD `pb{pbJT TD |pb}pbKT UD ~pbaqbLT VD bqbcqbMT WD dqbeqbNT XD fqbgqbOT YD hqbiqbjqbkqblqbmqbnqbZD PT oqbpqb0D QT qqbRT 1D rqbsqbtqbuqbvqbwqbST 2D xqbyqbzqbAqbBqbCqbDqb3D TT EqbFqb4D UT GqbVT 5D HqbIqbWT 6D JqbKqbXT 7D LqbMqb8D 9D !D Nqb#D OqbPqbQqbRqbSqbTqb$D UqbVqbWqb%D XqbYqbZqb0qb1qb'D 2qb3qb4qb5qb(D 6qb7qb8qb9qb!qbYT #qb)D $qb%qbte *D ZT 'qb4i +D (qb0T )qb,D 1T *qb+qb,qb-qb2T -D .qb3T .D /qb4T /D :qb5T :D ;qb=qb;D =D ?D @D ?qb[D @qb6T ]D ^D _D )F [qb`D rj 8F sj 9F tj :F ]qb^qb_qb`qb{qb|qb}qb~qbarbbrbcrb7T drberbfrbgrbhrbirbjrbkrblrbmrb{D nrborb|D prbqrbrrb8T srbtrburbvrbwrbxrbyrbzrbArbBrbCrbDrb}D Erb9T !T ~D FrbGrbHrb#T IrbJrbaE $T bE KrbcE %T Lrbn !g ue Mrb5i Nrb6i Orb7i dE PrbQrbRrb'T eE SrbTrbUrb(T fE )T gE VrbWrbXrbYrbZrb0rb1rb2rbhE 3rbiE 4rbjE 5rbkE *T lE +T mE ,T nE -T oE .T /T pE :T qE rE sE tE uE vE ;T 6rbwE xE =T 7rb?T yE zE @T AE [T 8rb9rbBE !rb]T #rbCE $rb%rb'rbDE (rb)rbEE *rb+rbFE ,rb-rb.rb/rbGE :rb;rb=rb^T HE _T IE `T JE {T KE aV LE |T ME ?rb}T NE ~T OE aU PE bU @rbcU QE [rbRE ]rbdU SE ^rbeU TE _rbfU `rb{rbUE gU hU |rbVE }rb~rbWE iU XE asbbsbcsbjU YE dsbesbfsbkU ZE gsbhsbisbjsblU 0E mU 1E nU 2E oU 3E pU 4E qU rU 5E 6E sU 7E tU 8E uU 9E vU !E wU xU #E $E yU zU %E AU 'E ksblsb(E msbBU CU )E DU *E +E EU nsb,E osbpsbqsbFU GU -E rsbssbtsbHU .E usbvsbwsb/E xsbIU :E ysbJU KU zsbAsb;E Bsb=E LU Csb?E DsbMU @E NU Esb[E FsbOU GsbHsbIsb]E PU QU JsbKsb^E LsbMsbRU Nsb_E OsbPsbSU `E QsbRsbTU SsbTsb{E UsbVsbUU |E WsbVU }E XsbYsbZsb0sbWU 1sb~E 2sb3sb4sb5sbXU aF 6sb7sb8sb9sbYU !sb#sb$sbbF %sbcF dF eF fF gF ZU hF 0U iF jF 'sb1U kF 2U lF (sb3U mF 4U 5U nF )sb6U oF *sb7U pF 8U qF 9U rF +sbsF !U ,sb-sb.sb/sbtF :sb;sb=sb#U ?sb@sb[sbuF ]sb^sb_sb$U `sb{sb|sb}sb~sbatbbtbctbdtb%U vF etbftbgtbwF 'U htbxF (U itbyF zF jtb)U ktb*U ltbqi ,g mtbve ntb+U AF otb,U ptbqtb/b rtbstbBF ttbutbvtbwtbxtbCF ytbDF ztbAtbBtbCtbDtbEF EtbFF FtbGtbGF we -U HtbHF sb ItbJtb.U KtbIF /U JF LtbMtbKF NtbOtbPtbQtbRtbLF StbMF ri xe NF TtbUtbOF ye ze Ae VtbWtbXtbYtbZtb0tb1tb2tb

1140 

1141 def add_api_route( 1abcdefg

1142 self, 

1143 path: str, 

1144 endpoint: Callable[..., Any], 

1145 *, 

1146 response_model: Any = Default(None), 

1147 status_code: Optional[int] = None, 

1148 tags: Optional[List[Union[str, Enum]]] = None, 

1149 dependencies: Optional[Sequence[Depends]] = None, 

1150 summary: Optional[str] = None, 

1151 description: Optional[str] = None, 

1152 response_description: str = "Successful Response", 

1153 responses: Optional[Dict[Union[int, str], Dict[str, Any]]] = None, 

1154 deprecated: Optional[bool] = None, 

1155 methods: Optional[List[str]] = None, 

1156 operation_id: Optional[str] = None, 

1157 response_model_include: Optional[IncEx] = None, 

1158 response_model_exclude: Optional[IncEx] = None, 

1159 response_model_by_alias: bool = True, 

1160 response_model_exclude_unset: bool = False, 

1161 response_model_exclude_defaults: bool = False, 

1162 response_model_exclude_none: bool = False, 

1163 include_in_schema: bool = True, 

1164 response_class: Union[Type[Response], DefaultPlaceholder] = Default( 

1165 JSONResponse 

1166 ), 

1167 name: Optional[str] = None, 

1168 openapi_extra: Optional[Dict[str, Any]] = None, 

1169 generate_unique_id_function: Callable[[routing.APIRoute], str] = Default( 

1170 generate_unique_id 

1171 ), 

1172 ) -> None: 

1173 self.router.add_api_route( 1abcdefg

1174 path, 

1175 endpoint=endpoint, 

1176 response_model=response_model, 

1177 status_code=status_code, 

1178 tags=tags, 

1179 dependencies=dependencies, 

1180 summary=summary, 

1181 description=description, 

1182 response_description=response_description, 

1183 responses=responses, 

1184 deprecated=deprecated, 

1185 methods=methods, 

1186 operation_id=operation_id, 

1187 response_model_include=response_model_include, 

1188 response_model_exclude=response_model_exclude, 

1189 response_model_by_alias=response_model_by_alias, 

1190 response_model_exclude_unset=response_model_exclude_unset, 

1191 response_model_exclude_defaults=response_model_exclude_defaults, 

1192 response_model_exclude_none=response_model_exclude_none, 

1193 include_in_schema=include_in_schema, 

1194 response_class=response_class, 

1195 name=name, 

1196 openapi_extra=openapi_extra, 

1197 generate_unique_id_function=generate_unique_id_function, 

1198 ) 

1199 

1200 def api_route( 1abcdefg

1201 self, 

1202 path: str, 

1203 *, 

1204 response_model: Any = Default(None), 

1205 status_code: Optional[int] = None, 

1206 tags: Optional[List[Union[str, Enum]]] = None, 

1207 dependencies: Optional[Sequence[Depends]] = None, 

1208 summary: Optional[str] = None, 

1209 description: Optional[str] = None, 

1210 response_description: str = "Successful Response", 

1211 responses: Optional[Dict[Union[int, str], Dict[str, Any]]] = None, 

1212 deprecated: Optional[bool] = None, 

1213 methods: Optional[List[str]] = None, 

1214 operation_id: Optional[str] = None, 

1215 response_model_include: Optional[IncEx] = None, 

1216 response_model_exclude: Optional[IncEx] = None, 

1217 response_model_by_alias: bool = True, 

1218 response_model_exclude_unset: bool = False, 

1219 response_model_exclude_defaults: bool = False, 

1220 response_model_exclude_none: bool = False, 

1221 include_in_schema: bool = True, 

1222 response_class: Type[Response] = Default(JSONResponse), 

1223 name: Optional[str] = None, 

1224 openapi_extra: Optional[Dict[str, Any]] = None, 

1225 generate_unique_id_function: Callable[[routing.APIRoute], str] = Default( 

1226 generate_unique_id 

1227 ), 

1228 ) -> Callable[[DecoratedCallable], DecoratedCallable]: 

1229 def decorator(func: DecoratedCallable) -> DecoratedCallable: 1abcdefg

1230 self.router.add_api_route( 1abcdefg

1231 path, 

1232 func, 

1233 response_model=response_model, 

1234 status_code=status_code, 

1235 tags=tags, 

1236 dependencies=dependencies, 

1237 summary=summary, 

1238 description=description, 

1239 response_description=response_description, 

1240 responses=responses, 

1241 deprecated=deprecated, 

1242 methods=methods, 

1243 operation_id=operation_id, 

1244 response_model_include=response_model_include, 

1245 response_model_exclude=response_model_exclude, 

1246 response_model_by_alias=response_model_by_alias, 

1247 response_model_exclude_unset=response_model_exclude_unset, 

1248 response_model_exclude_defaults=response_model_exclude_defaults, 

1249 response_model_exclude_none=response_model_exclude_none, 

1250 include_in_schema=include_in_schema, 

1251 response_class=response_class, 

1252 name=name, 

1253 openapi_extra=openapi_extra, 

1254 generate_unique_id_function=generate_unique_id_function, 

1255 ) 

1256 return func 1abcdefg

1257 

1258 return decorator 1abcdefg

1259 

1260 def add_api_websocket_route( 1abcdefg

1261 self, 

1262 path: str, 

1263 endpoint: Callable[..., Any], 

1264 name: Optional[str] = None, 

1265 *, 

1266 dependencies: Optional[Sequence[Depends]] = None, 

1267 ) -> None: 

1268 self.router.add_api_websocket_route( 2a iVb jVc kVd lVe mVf nVg oV

1269 path, 

1270 endpoint, 

1271 name=name, 

1272 dependencies=dependencies, 

1273 ) 

1274 

1275 def websocket( 1abcdefg

1276 self, 

1277 path: Annotated[ 

1278 str, 

1279 Doc( 

1280 """ 

1281 WebSocket path. 

1282 """ 

1283 ), 

1284 ], 

1285 name: Annotated[ 

1286 Optional[str], 

1287 Doc( 

1288 """ 

1289 A name for the WebSocket. Only used internally. 

1290 """ 

1291 ), 

1292 ] = None, 

1293 *, 

1294 dependencies: Annotated[ 

1295 Optional[Sequence[Depends]], 

1296 Doc( 

1297 """ 

1298 A list of dependencies (using `Depends()`) to be used for this 

1299 WebSocket. 

1300 

1301 Read more about it in the 

1302 [FastAPI docs for WebSockets](https://fastapi.tiangolo.com/advanced/websockets/). 

1303 """ 

1304 ), 

1305 ] = None, 

1306 ) -> Callable[[DecoratedCallable], DecoratedCallable]: 

1307 """ 

1308 Decorate a WebSocket function. 

1309 

1310 Read more about it in the 

1311 [FastAPI docs for WebSockets](https://fastapi.tiangolo.com/advanced/websockets/). 

1312 

1313 **Example** 

1314 

1315 ```python 

1316 from fastapi import FastAPI, WebSocket 

1317 

1318 app = FastAPI() 

1319 

1320 @app.websocket("/ws") 

1321 async def websocket_endpoint(websocket: WebSocket): 

1322 await websocket.accept() 

1323 while True: 

1324 data = await websocket.receive_text() 

1325 await websocket.send_text(f"Message text was: {data}") 

1326 ``` 

1327 """ 

1328 

1329 def decorator(func: DecoratedCallable) -> DecoratedCallable: 2a iVb jVc kVd lVe mVf nVg oV

1330 self.add_api_websocket_route( 2a iVb jVc kVd lVe mVf nVg oV

1331 path, 

1332 func, 

1333 name=name, 

1334 dependencies=dependencies, 

1335 ) 

1336 return func 1abcdefg

1337 

1338 return decorator 2a iVb jVc kVd lVe mVf nVg oV

1339 

1340 def include_router( 1abcdefg

1341 self, 

1342 router: Annotated[routing.APIRouter, Doc("The `APIRouter` to include.")], 

1343 *, 

1344 prefix: Annotated[str, Doc("An optional path prefix for the router.")] = "", 

1345 tags: Annotated[ 

1346 Optional[List[Union[str, Enum]]], 

1347 Doc( 

1348 """ 

1349 A list of tags to be applied to all the *path operations* in this 

1350 router. 

1351 

1352 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

1353 

1354 Read more about it in the 

1355 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/). 

1356 """ 

1357 ), 

1358 ] = None, 

1359 dependencies: Annotated[ 

1360 Optional[Sequence[Depends]], 

1361 Doc( 

1362 """ 

1363 A list of dependencies (using `Depends()`) to be applied to all the 

1364 *path operations* in this router. 

1365 

1366 Read more about it in the 

1367 [FastAPI docs for Bigger Applications - Multiple Files](https://fastapi.tiangolo.com/tutorial/bigger-applications/#include-an-apirouter-with-a-custom-prefix-tags-responses-and-dependencies). 

1368 

1369 **Example** 

1370 

1371 ```python 

1372 from fastapi import Depends, FastAPI 

1373 

1374 from .dependencies import get_token_header 

1375 from .internal import admin 

1376 

1377 app = FastAPI() 

1378 

1379 app.include_router( 

1380 admin.router, 

1381 dependencies=[Depends(get_token_header)], 

1382 ) 

1383 ``` 

1384 """ 

1385 ), 

1386 ] = None, 

1387 responses: Annotated[ 

1388 Optional[Dict[Union[int, str], Dict[str, Any]]], 

1389 Doc( 

1390 """ 

1391 Additional responses to be shown in OpenAPI. 

1392 

1393 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

1394 

1395 Read more about it in the 

1396 [FastAPI docs for Additional Responses in OpenAPI](https://fastapi.tiangolo.com/advanced/additional-responses/). 

1397 

1398 And in the 

1399 [FastAPI docs for Bigger Applications](https://fastapi.tiangolo.com/tutorial/bigger-applications/#include-an-apirouter-with-a-custom-prefix-tags-responses-and-dependencies). 

1400 """ 

1401 ), 

1402 ] = None, 

1403 deprecated: Annotated[ 

1404 Optional[bool], 

1405 Doc( 

1406 """ 

1407 Mark all the *path operations* in this router as deprecated. 

1408 

1409 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

1410 

1411 **Example** 

1412 

1413 ```python 

1414 from fastapi import FastAPI 

1415 

1416 from .internal import old_api 

1417 

1418 app = FastAPI() 

1419 

1420 app.include_router( 

1421 old_api.router, 

1422 deprecated=True, 

1423 ) 

1424 ``` 

1425 """ 

1426 ), 

1427 ] = None, 

1428 include_in_schema: Annotated[ 

1429 bool, 

1430 Doc( 

1431 """ 

1432 Include (or not) all the *path operations* in this router in the 

1433 generated OpenAPI schema. 

1434 

1435 This affects the generated OpenAPI (e.g. visible at `/docs`). 

1436 

1437 **Example** 

1438 

1439 ```python 

1440 from fastapi import FastAPI 

1441 

1442 from .internal import old_api 

1443 

1444 app = FastAPI() 

1445 

1446 app.include_router( 

1447 old_api.router, 

1448 include_in_schema=False, 

1449 ) 

1450 ``` 

1451 """ 

1452 ), 

1453 ] = True, 

1454 default_response_class: Annotated[ 

1455 Type[Response], 

1456 Doc( 

1457 """ 

1458 Default response class to be used for the *path operations* in this 

1459 router. 

1460 

1461 Read more in the 

1462 [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#default-response-class). 

1463 

1464 **Example** 

1465 

1466 ```python 

1467 from fastapi import FastAPI 

1468 from fastapi.responses import ORJSONResponse 

1469 

1470 from .internal import old_api 

1471 

1472 app = FastAPI() 

1473 

1474 app.include_router( 

1475 old_api.router, 

1476 default_response_class=ORJSONResponse, 

1477 ) 

1478 ``` 

1479 """ 

1480 ), 

1481 ] = Default(JSONResponse), 

1482 callbacks: Annotated[ 

1483 Optional[List[BaseRoute]], 

1484 Doc( 

1485 """ 

1486 List of *path operations* that will be used as OpenAPI callbacks. 

1487 

1488 This is only for OpenAPI documentation, the callbacks won't be used 

1489 directly. 

1490 

1491 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

1492 

1493 Read more about it in the 

1494 [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/). 

1495 """ 

1496 ), 

1497 ] = None, 

1498 generate_unique_id_function: Annotated[ 

1499 Callable[[routing.APIRoute], str], 

1500 Doc( 

1501 """ 

1502 Customize the function used to generate unique IDs for the *path 

1503 operations* shown in the generated OpenAPI. 

1504 

1505 This is particularly useful when automatically generating clients or 

1506 SDKs for your API. 

1507 

1508 Read more about it in the 

1509 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function). 

1510 """ 

1511 ), 

1512 ] = Default(generate_unique_id), 

1513 ) -> None: 

1514 """ 

1515 Include an `APIRouter` in the same app. 

1516 

1517 Read more about it in the 

1518 [FastAPI docs for Bigger Applications](https://fastapi.tiangolo.com/tutorial/bigger-applications/). 

1519 

1520 ## Example 

1521 

1522 ```python 

1523 from fastapi import FastAPI 

1524 

1525 from .users import users_router 

1526 

1527 app = FastAPI() 

1528 

1529 app.include_router(users_router) 

1530 ``` 

1531 """ 

1532 self.router.include_router( 3a ;b 3tbo p q r s t bc cc tb Eb dc ec fc jc kc lc b nc 4tbx y z A B C Bc Cc ub Lb Dc Ec Fc Jc Kc Lc c Nc 5tbG H I J K L 7c 8c vb Sb 9c !c #c *c +c ,c d .c 6tbP Q R S T U ed fd wb Zb gd hd id od pd qd e sd 7tbY Z 0 1 2 3 Md Nd xb 6b Od Pd Qd Wd Xd Yd f 0d 8tb7 8 9 ! # $ -d .d yb %b /d :d ;d ^d _d `d g |d 9tb) * + , - . oe pe zb -b qe re se ye ze Ae

1533 router, 

1534 prefix=prefix, 

1535 tags=tags, 

1536 dependencies=dependencies, 

1537 responses=responses, 

1538 deprecated=deprecated, 

1539 include_in_schema=include_in_schema, 

1540 default_response_class=default_response_class, 

1541 callbacks=callbacks, 

1542 generate_unique_id_function=generate_unique_id_function, 

1543 ) 

1544 

1545 def get( 2a b c d e f g ^U

1546 self, 

1547 path: Annotated[ 

1548 str, 

1549 Doc( 

1550 """ 

1551 The URL path to be used for this *path operation*. 

1552 

1553 For example, in `http://example.com/items`, the path is `/items`. 

1554 """ 

1555 ), 

1556 ], 

1557 *, 

1558 response_model: Annotated[ 

1559 Any, 

1560 Doc( 

1561 """ 

1562 The type to use for the response. 

1563 

1564 It could be any valid Pydantic *field* type. So, it doesn't have to 

1565 be a Pydantic model, it could be other things, like a `list`, `dict`, 

1566 etc. 

1567 

1568 It will be used for: 

1569 

1570 * Documentation: the generated OpenAPI (and the UI at `/docs`) will 

1571 show it as the response (JSON Schema). 

1572 * Serialization: you could return an arbitrary object and the 

1573 `response_model` would be used to serialize that object into the 

1574 corresponding JSON. 

1575 * Filtering: the JSON sent to the client will only contain the data 

1576 (fields) defined in the `response_model`. If you returned an object 

1577 that contains an attribute `password` but the `response_model` does 

1578 not include that field, the JSON sent to the client would not have 

1579 that `password`. 

1580 * Validation: whatever you return will be serialized with the 

1581 `response_model`, converting any data as necessary to generate the 

1582 corresponding JSON. But if the data in the object returned is not 

1583 valid, that would mean a violation of the contract with the client, 

1584 so it's an error from the API developer. So, FastAPI will raise an 

1585 error and return a 500 error code (Internal Server Error). 

1586 

1587 Read more about it in the 

1588 [FastAPI docs for Response Model](https://fastapi.tiangolo.com/tutorial/response-model/). 

1589 """ 

1590 ), 

1591 ] = Default(None), 

1592 status_code: Annotated[ 

1593 Optional[int], 

1594 Doc( 

1595 """ 

1596 The default status code to be used for the response. 

1597 

1598 You could override the status code by returning a response directly. 

1599 

1600 Read more about it in the 

1601 [FastAPI docs for Response Status Code](https://fastapi.tiangolo.com/tutorial/response-status-code/). 

1602 """ 

1603 ), 

1604 ] = None, 

1605 tags: Annotated[ 

1606 Optional[List[Union[str, Enum]]], 

1607 Doc( 

1608 """ 

1609 A list of tags to be applied to the *path operation*. 

1610 

1611 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

1612 

1613 Read more about it in the 

1614 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/#tags). 

1615 """ 

1616 ), 

1617 ] = None, 

1618 dependencies: Annotated[ 

1619 Optional[Sequence[Depends]], 

1620 Doc( 

1621 """ 

1622 A list of dependencies (using `Depends()`) to be applied to the 

1623 *path operation*. 

1624 

1625 Read more about it in the 

1626 [FastAPI docs for Dependencies in path operation decorators](https://fastapi.tiangolo.com/tutorial/dependencies/dependencies-in-path-operation-decorators/). 

1627 """ 

1628 ), 

1629 ] = None, 

1630 summary: Annotated[ 

1631 Optional[str], 

1632 Doc( 

1633 """ 

1634 A summary for the *path operation*. 

1635 

1636 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

1637 

1638 Read more about it in the 

1639 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/). 

1640 """ 

1641 ), 

1642 ] = None, 

1643 description: Annotated[ 

1644 Optional[str], 

1645 Doc( 

1646 """ 

1647 A description for the *path operation*. 

1648 

1649 If not provided, it will be extracted automatically from the docstring 

1650 of the *path operation function*. 

1651 

1652 It can contain Markdown. 

1653 

1654 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

1655 

1656 Read more about it in the 

1657 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/). 

1658 """ 

1659 ), 

1660 ] = None, 

1661 response_description: Annotated[ 

1662 str, 

1663 Doc( 

1664 """ 

1665 The description for the default response. 

1666 

1667 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

1668 """ 

1669 ), 

1670 ] = "Successful Response", 

1671 responses: Annotated[ 

1672 Optional[Dict[Union[int, str], Dict[str, Any]]], 

1673 Doc( 

1674 """ 

1675 Additional responses that could be returned by this *path operation*. 

1676 

1677 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

1678 """ 

1679 ), 

1680 ] = None, 

1681 deprecated: Annotated[ 

1682 Optional[bool], 

1683 Doc( 

1684 """ 

1685 Mark this *path operation* as deprecated. 

1686 

1687 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

1688 """ 

1689 ), 

1690 ] = None, 

1691 operation_id: Annotated[ 

1692 Optional[str], 

1693 Doc( 

1694 """ 

1695 Custom operation ID to be used by this *path operation*. 

1696 

1697 By default, it is generated automatically. 

1698 

1699 If you provide a custom operation ID, you need to make sure it is 

1700 unique for the whole API. 

1701 

1702 You can customize the 

1703 operation ID generation with the parameter 

1704 `generate_unique_id_function` in the `FastAPI` class. 

1705 

1706 Read more about it in the 

1707 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function). 

1708 """ 

1709 ), 

1710 ] = None, 

1711 response_model_include: Annotated[ 

1712 Optional[IncEx], 

1713 Doc( 

1714 """ 

1715 Configuration passed to Pydantic to include only certain fields in the 

1716 response data. 

1717 

1718 Read more about it in the 

1719 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude). 

1720 """ 

1721 ), 

1722 ] = None, 

1723 response_model_exclude: Annotated[ 

1724 Optional[IncEx], 

1725 Doc( 

1726 """ 

1727 Configuration passed to Pydantic to exclude certain fields in the 

1728 response data. 

1729 

1730 Read more about it in the 

1731 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude). 

1732 """ 

1733 ), 

1734 ] = None, 

1735 response_model_by_alias: Annotated[ 

1736 bool, 

1737 Doc( 

1738 """ 

1739 Configuration passed to Pydantic to define if the response model 

1740 should be serialized by alias when an alias is used. 

1741 

1742 Read more about it in the 

1743 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude). 

1744 """ 

1745 ), 

1746 ] = True, 

1747 response_model_exclude_unset: Annotated[ 

1748 bool, 

1749 Doc( 

1750 """ 

1751 Configuration passed to Pydantic to define if the response data 

1752 should have all the fields, including the ones that were not set and 

1753 have their default values. This is different from 

1754 `response_model_exclude_defaults` in that if the fields are set, 

1755 they will be included in the response, even if the value is the same 

1756 as the default. 

1757 

1758 When `True`, default values are omitted from the response. 

1759 

1760 Read more about it in the 

1761 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter). 

1762 """ 

1763 ), 

1764 ] = False, 

1765 response_model_exclude_defaults: Annotated[ 

1766 bool, 

1767 Doc( 

1768 """ 

1769 Configuration passed to Pydantic to define if the response data 

1770 should have all the fields, including the ones that have the same value 

1771 as the default. This is different from `response_model_exclude_unset` 

1772 in that if the fields are set but contain the same default values, 

1773 they will be excluded from the response. 

1774 

1775 When `True`, default values are omitted from the response. 

1776 

1777 Read more about it in the 

1778 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter). 

1779 """ 

1780 ), 

1781 ] = False, 

1782 response_model_exclude_none: Annotated[ 

1783 bool, 

1784 Doc( 

1785 """ 

1786 Configuration passed to Pydantic to define if the response data should 

1787 exclude fields set to `None`. 

1788 

1789 This is much simpler (less smart) than `response_model_exclude_unset` 

1790 and `response_model_exclude_defaults`. You probably want to use one of 

1791 those two instead of this one, as those allow returning `None` values 

1792 when it makes sense. 

1793 

1794 Read more about it in the 

1795 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_exclude_none). 

1796 """ 

1797 ), 

1798 ] = False, 

1799 include_in_schema: Annotated[ 

1800 bool, 

1801 Doc( 

1802 """ 

1803 Include this *path operation* in the generated OpenAPI schema. 

1804 

1805 This affects the generated OpenAPI (e.g. visible at `/docs`). 

1806 

1807 Read more about it in the 

1808 [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi). 

1809 """ 

1810 ), 

1811 ] = True, 

1812 response_class: Annotated[ 

1813 Type[Response], 

1814 Doc( 

1815 """ 

1816 Response class to be used for this *path operation*. 

1817 

1818 This will not be used if you return a response directly. 

1819 

1820 Read more about it in the 

1821 [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#redirectresponse). 

1822 """ 

1823 ), 

1824 ] = Default(JSONResponse), 

1825 name: Annotated[ 

1826 Optional[str], 

1827 Doc( 

1828 """ 

1829 Name for this *path operation*. Only used internally. 

1830 """ 

1831 ), 

1832 ] = None, 

1833 callbacks: Annotated[ 

1834 Optional[List[BaseRoute]], 

1835 Doc( 

1836 """ 

1837 List of *path operations* that will be used as OpenAPI callbacks. 

1838 

1839 This is only for OpenAPI documentation, the callbacks won't be used 

1840 directly. 

1841 

1842 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

1843 

1844 Read more about it in the 

1845 [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/). 

1846 """ 

1847 ), 

1848 ] = None, 

1849 openapi_extra: Annotated[ 

1850 Optional[Dict[str, Any]], 

1851 Doc( 

1852 """ 

1853 Extra metadata to be included in the OpenAPI schema for this *path 

1854 operation*. 

1855 

1856 Read more about it in the 

1857 [FastAPI docs for Path Operation Advanced Configuration](https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#custom-openapi-path-operation-schema). 

1858 """ 

1859 ), 

1860 ] = None, 

1861 generate_unique_id_function: Annotated[ 

1862 Callable[[routing.APIRoute], str], 

1863 Doc( 

1864 """ 

1865 Customize the function used to generate unique IDs for the *path 

1866 operations* shown in the generated OpenAPI. 

1867 

1868 This is particularly useful when automatically generating clients or 

1869 SDKs for your API. 

1870 

1871 Read more about it in the 

1872 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function). 

1873 """ 

1874 ), 

1875 ] = Default(generate_unique_id), 

1876 ) -> Callable[[DecoratedCallable], DecoratedCallable]: 

1877 """ 

1878 Add a *path operation* using an HTTP GET operation. 

1879 

1880 ## Example 

1881 

1882 ```python 

1883 from fastapi import FastAPI 

1884 

1885 app = FastAPI() 

1886 

1887 @app.get("/items/") 

1888 def read_items(): 

1889 return [{"name": "Empanada"}, {"name": "Arepa"}] 

1890 ``` 

1891 """ 

1892 return self.router.get( 3a (i !tb:b [b ]b ^b _b #tb`b {b Be Ce De Ee Fe Ge He Ie Je Ke Le Ab Bb Cb u v Db Xe Ye Ze 0e 1e 2e ~b ac tb Eb Fb w h 3e gc 4e 5e hc Gb b .i $tbmc rc sc tc uc %tbvc wc 6e 7e 8e 9e !e #e $e %e 'e (e )e Hb Ib Jb D E Kb [e ]e ^e _e `e {e zc Ac ub Lb Mb F i |e Gc }e ~e Hc Nb c @i 'tbMc Rc Sc Tc Uc (tbVc Wc af bf cf df ef ff gf hf if jf kf Ob Pb Qb M N Rb | 2c 3c 4c wf xf yf zf Af Bf 5c 6c vb Sb Tb O $c j Cf %c Df Ef 'c Ub d {i )tb-c =c ?c @c [c *tb]c ^c Ff Gf Hf If Jf Kf Lf Mf Nf Of Pf Vb Wb Xb V W Yb cb ~c ad bd 1f 2f 3f 4f 5f 6f cd dd wb Zb 0b X jd k 7f kd 8f 9f ld 1b e cj +tbrd wd xd yd zd ,tbAd Bd !f #f $f %f 'f (f )f *f +f ,f -f 2b 3b 4b 4 5 5b hb Hd Id Jd `f {f |f }f ~f ag Kd Ld xb 6b 7b 6 Rd l bg Sd cg dg Td 8b f ij -tbZd 4d 5d 6d 7d .tb8d 9d eg fg gg hg ig jg kg lg mg ng og 9b !b #b % ' $b mb (d )d *d Ag Bg Cg Dg Eg Fg +d ,d yb %b 'b ( =d m Gg ?d Hg Ig @d (b g oj /tb{d be ce de :tbee Jg Kg Lg Mg Ng Og Pg Qg Rg Sg Tg )b *b +b / : ,b rb je ke le 5g 6g 7g 8g 9g me ne zb -b .b ; te n !g ue #g $g ve /b

1893 path, 

1894 response_model=response_model, 

1895 status_code=status_code, 

1896 tags=tags, 

1897 dependencies=dependencies, 

1898 summary=summary, 

1899 description=description, 

1900 response_description=response_description, 

1901 responses=responses, 

1902 deprecated=deprecated, 

1903 operation_id=operation_id, 

1904 response_model_include=response_model_include, 

1905 response_model_exclude=response_model_exclude, 

1906 response_model_by_alias=response_model_by_alias, 

1907 response_model_exclude_unset=response_model_exclude_unset, 

1908 response_model_exclude_defaults=response_model_exclude_defaults, 

1909 response_model_exclude_none=response_model_exclude_none, 

1910 include_in_schema=include_in_schema, 

1911 response_class=response_class, 

1912 name=name, 

1913 callbacks=callbacks, 

1914 openapi_extra=openapi_extra, 

1915 generate_unique_id_function=generate_unique_id_function, 

1916 ) 

1917 

1918 def put( 2a b c d e f g ^U

1919 self, 

1920 path: Annotated[ 

1921 str, 

1922 Doc( 

1923 """ 

1924 The URL path to be used for this *path operation*. 

1925 

1926 For example, in `http://example.com/items`, the path is `/items`. 

1927 """ 

1928 ), 

1929 ], 

1930 *, 

1931 response_model: Annotated[ 

1932 Any, 

1933 Doc( 

1934 """ 

1935 The type to use for the response. 

1936 

1937 It could be any valid Pydantic *field* type. So, it doesn't have to 

1938 be a Pydantic model, it could be other things, like a `list`, `dict`, 

1939 etc. 

1940 

1941 It will be used for: 

1942 

1943 * Documentation: the generated OpenAPI (and the UI at `/docs`) will 

1944 show it as the response (JSON Schema). 

1945 * Serialization: you could return an arbitrary object and the 

1946 `response_model` would be used to serialize that object into the 

1947 corresponding JSON. 

1948 * Filtering: the JSON sent to the client will only contain the data 

1949 (fields) defined in the `response_model`. If you returned an object 

1950 that contains an attribute `password` but the `response_model` does 

1951 not include that field, the JSON sent to the client would not have 

1952 that `password`. 

1953 * Validation: whatever you return will be serialized with the 

1954 `response_model`, converting any data as necessary to generate the 

1955 corresponding JSON. But if the data in the object returned is not 

1956 valid, that would mean a violation of the contract with the client, 

1957 so it's an error from the API developer. So, FastAPI will raise an 

1958 error and return a 500 error code (Internal Server Error). 

1959 

1960 Read more about it in the 

1961 [FastAPI docs for Response Model](https://fastapi.tiangolo.com/tutorial/response-model/). 

1962 """ 

1963 ), 

1964 ] = Default(None), 

1965 status_code: Annotated[ 

1966 Optional[int], 

1967 Doc( 

1968 """ 

1969 The default status code to be used for the response. 

1970 

1971 You could override the status code by returning a response directly. 

1972 

1973 Read more about it in the 

1974 [FastAPI docs for Response Status Code](https://fastapi.tiangolo.com/tutorial/response-status-code/). 

1975 """ 

1976 ), 

1977 ] = None, 

1978 tags: Annotated[ 

1979 Optional[List[Union[str, Enum]]], 

1980 Doc( 

1981 """ 

1982 A list of tags to be applied to the *path operation*. 

1983 

1984 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

1985 

1986 Read more about it in the 

1987 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/#tags). 

1988 """ 

1989 ), 

1990 ] = None, 

1991 dependencies: Annotated[ 

1992 Optional[Sequence[Depends]], 

1993 Doc( 

1994 """ 

1995 A list of dependencies (using `Depends()`) to be applied to the 

1996 *path operation*. 

1997 

1998 Read more about it in the 

1999 [FastAPI docs for Dependencies in path operation decorators](https://fastapi.tiangolo.com/tutorial/dependencies/dependencies-in-path-operation-decorators/). 

2000 """ 

2001 ), 

2002 ] = None, 

2003 summary: Annotated[ 

2004 Optional[str], 

2005 Doc( 

2006 """ 

2007 A summary for the *path operation*. 

2008 

2009 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

2010 

2011 Read more about it in the 

2012 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/). 

2013 """ 

2014 ), 

2015 ] = None, 

2016 description: Annotated[ 

2017 Optional[str], 

2018 Doc( 

2019 """ 

2020 A description for the *path operation*. 

2021 

2022 If not provided, it will be extracted automatically from the docstring 

2023 of the *path operation function*. 

2024 

2025 It can contain Markdown. 

2026 

2027 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

2028 

2029 Read more about it in the 

2030 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/). 

2031 """ 

2032 ), 

2033 ] = None, 

2034 response_description: Annotated[ 

2035 str, 

2036 Doc( 

2037 """ 

2038 The description for the default response. 

2039 

2040 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

2041 """ 

2042 ), 

2043 ] = "Successful Response", 

2044 responses: Annotated[ 

2045 Optional[Dict[Union[int, str], Dict[str, Any]]], 

2046 Doc( 

2047 """ 

2048 Additional responses that could be returned by this *path operation*. 

2049 

2050 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

2051 """ 

2052 ), 

2053 ] = None, 

2054 deprecated: Annotated[ 

2055 Optional[bool], 

2056 Doc( 

2057 """ 

2058 Mark this *path operation* as deprecated. 

2059 

2060 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

2061 """ 

2062 ), 

2063 ] = None, 

2064 operation_id: Annotated[ 

2065 Optional[str], 

2066 Doc( 

2067 """ 

2068 Custom operation ID to be used by this *path operation*. 

2069 

2070 By default, it is generated automatically. 

2071 

2072 If you provide a custom operation ID, you need to make sure it is 

2073 unique for the whole API. 

2074 

2075 You can customize the 

2076 operation ID generation with the parameter 

2077 `generate_unique_id_function` in the `FastAPI` class. 

2078 

2079 Read more about it in the 

2080 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function). 

2081 """ 

2082 ), 

2083 ] = None, 

2084 response_model_include: Annotated[ 

2085 Optional[IncEx], 

2086 Doc( 

2087 """ 

2088 Configuration passed to Pydantic to include only certain fields in the 

2089 response data. 

2090 

2091 Read more about it in the 

2092 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude). 

2093 """ 

2094 ), 

2095 ] = None, 

2096 response_model_exclude: Annotated[ 

2097 Optional[IncEx], 

2098 Doc( 

2099 """ 

2100 Configuration passed to Pydantic to exclude certain fields in the 

2101 response data. 

2102 

2103 Read more about it in the 

2104 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude). 

2105 """ 

2106 ), 

2107 ] = None, 

2108 response_model_by_alias: Annotated[ 

2109 bool, 

2110 Doc( 

2111 """ 

2112 Configuration passed to Pydantic to define if the response model 

2113 should be serialized by alias when an alias is used. 

2114 

2115 Read more about it in the 

2116 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude). 

2117 """ 

2118 ), 

2119 ] = True, 

2120 response_model_exclude_unset: Annotated[ 

2121 bool, 

2122 Doc( 

2123 """ 

2124 Configuration passed to Pydantic to define if the response data 

2125 should have all the fields, including the ones that were not set and 

2126 have their default values. This is different from 

2127 `response_model_exclude_defaults` in that if the fields are set, 

2128 they will be included in the response, even if the value is the same 

2129 as the default. 

2130 

2131 When `True`, default values are omitted from the response. 

2132 

2133 Read more about it in the 

2134 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter). 

2135 """ 

2136 ), 

2137 ] = False, 

2138 response_model_exclude_defaults: Annotated[ 

2139 bool, 

2140 Doc( 

2141 """ 

2142 Configuration passed to Pydantic to define if the response data 

2143 should have all the fields, including the ones that have the same value 

2144 as the default. This is different from `response_model_exclude_unset` 

2145 in that if the fields are set but contain the same default values, 

2146 they will be excluded from the response. 

2147 

2148 When `True`, default values are omitted from the response. 

2149 

2150 Read more about it in the 

2151 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter). 

2152 """ 

2153 ), 

2154 ] = False, 

2155 response_model_exclude_none: Annotated[ 

2156 bool, 

2157 Doc( 

2158 """ 

2159 Configuration passed to Pydantic to define if the response data should 

2160 exclude fields set to `None`. 

2161 

2162 This is much simpler (less smart) than `response_model_exclude_unset` 

2163 and `response_model_exclude_defaults`. You probably want to use one of 

2164 those two instead of this one, as those allow returning `None` values 

2165 when it makes sense. 

2166 

2167 Read more about it in the 

2168 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_exclude_none). 

2169 """ 

2170 ), 

2171 ] = False, 

2172 include_in_schema: Annotated[ 

2173 bool, 

2174 Doc( 

2175 """ 

2176 Include this *path operation* in the generated OpenAPI schema. 

2177 

2178 This affects the generated OpenAPI (e.g. visible at `/docs`). 

2179 

2180 Read more about it in the 

2181 [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi). 

2182 """ 

2183 ), 

2184 ] = True, 

2185 response_class: Annotated[ 

2186 Type[Response], 

2187 Doc( 

2188 """ 

2189 Response class to be used for this *path operation*. 

2190 

2191 This will not be used if you return a response directly. 

2192 

2193 Read more about it in the 

2194 [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#redirectresponse). 

2195 """ 

2196 ), 

2197 ] = Default(JSONResponse), 

2198 name: Annotated[ 

2199 Optional[str], 

2200 Doc( 

2201 """ 

2202 Name for this *path operation*. Only used internally. 

2203 """ 

2204 ), 

2205 ] = None, 

2206 callbacks: Annotated[ 

2207 Optional[List[BaseRoute]], 

2208 Doc( 

2209 """ 

2210 List of *path operations* that will be used as OpenAPI callbacks. 

2211 

2212 This is only for OpenAPI documentation, the callbacks won't be used 

2213 directly. 

2214 

2215 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

2216 

2217 Read more about it in the 

2218 [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/). 

2219 """ 

2220 ), 

2221 ] = None, 

2222 openapi_extra: Annotated[ 

2223 Optional[Dict[str, Any]], 

2224 Doc( 

2225 """ 

2226 Extra metadata to be included in the OpenAPI schema for this *path 

2227 operation*. 

2228 

2229 Read more about it in the 

2230 [FastAPI docs for Path Operation Advanced Configuration](https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#custom-openapi-path-operation-schema). 

2231 """ 

2232 ), 

2233 ] = None, 

2234 generate_unique_id_function: Annotated[ 

2235 Callable[[routing.APIRoute], str], 

2236 Doc( 

2237 """ 

2238 Customize the function used to generate unique IDs for the *path 

2239 operations* shown in the generated OpenAPI. 

2240 

2241 This is particularly useful when automatically generating clients or 

2242 SDKs for your API. 

2243 

2244 Read more about it in the 

2245 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function). 

2246 """ 

2247 ), 

2248 ] = Default(generate_unique_id), 

2249 ) -> Callable[[DecoratedCallable], DecoratedCallable]: 

2250 """ 

2251 Add a *path operation* using an HTTP PUT operation. 

2252 

2253 ## Example 

2254 

2255 ```python 

2256 from fastapi import FastAPI 

2257 from pydantic import BaseModel 

2258 

2259 class Item(BaseModel): 

2260 name: str 

2261 description: str | None = None 

2262 

2263 app = FastAPI() 

2264 

2265 @app.put("/items/{item_id}") 

2266 def replace_item(item_id: str, item: Item): 

2267 return {"message": "Item replaced", "id": item_id} 

2268 ``` 

2269 """ 

2270 return self.router.put( 1abcdefg

2271 path, 

2272 response_model=response_model, 

2273 status_code=status_code, 

2274 tags=tags, 

2275 dependencies=dependencies, 

2276 summary=summary, 

2277 description=description, 

2278 response_description=response_description, 

2279 responses=responses, 

2280 deprecated=deprecated, 

2281 operation_id=operation_id, 

2282 response_model_include=response_model_include, 

2283 response_model_exclude=response_model_exclude, 

2284 response_model_by_alias=response_model_by_alias, 

2285 response_model_exclude_unset=response_model_exclude_unset, 

2286 response_model_exclude_defaults=response_model_exclude_defaults, 

2287 response_model_exclude_none=response_model_exclude_none, 

2288 include_in_schema=include_in_schema, 

2289 response_class=response_class, 

2290 name=name, 

2291 callbacks=callbacks, 

2292 openapi_extra=openapi_extra, 

2293 generate_unique_id_function=generate_unique_id_function, 

2294 ) 

2295 

2296 def post( 2a b c d e f g ^U

2297 self, 

2298 path: Annotated[ 

2299 str, 

2300 Doc( 

2301 """ 

2302 The URL path to be used for this *path operation*. 

2303 

2304 For example, in `http://example.com/items`, the path is `/items`. 

2305 """ 

2306 ), 

2307 ], 

2308 *, 

2309 response_model: Annotated[ 

2310 Any, 

2311 Doc( 

2312 """ 

2313 The type to use for the response. 

2314 

2315 It could be any valid Pydantic *field* type. So, it doesn't have to 

2316 be a Pydantic model, it could be other things, like a `list`, `dict`, 

2317 etc. 

2318 

2319 It will be used for: 

2320 

2321 * Documentation: the generated OpenAPI (and the UI at `/docs`) will 

2322 show it as the response (JSON Schema). 

2323 * Serialization: you could return an arbitrary object and the 

2324 `response_model` would be used to serialize that object into the 

2325 corresponding JSON. 

2326 * Filtering: the JSON sent to the client will only contain the data 

2327 (fields) defined in the `response_model`. If you returned an object 

2328 that contains an attribute `password` but the `response_model` does 

2329 not include that field, the JSON sent to the client would not have 

2330 that `password`. 

2331 * Validation: whatever you return will be serialized with the 

2332 `response_model`, converting any data as necessary to generate the 

2333 corresponding JSON. But if the data in the object returned is not 

2334 valid, that would mean a violation of the contract with the client, 

2335 so it's an error from the API developer. So, FastAPI will raise an 

2336 error and return a 500 error code (Internal Server Error). 

2337 

2338 Read more about it in the 

2339 [FastAPI docs for Response Model](https://fastapi.tiangolo.com/tutorial/response-model/). 

2340 """ 

2341 ), 

2342 ] = Default(None), 

2343 status_code: Annotated[ 

2344 Optional[int], 

2345 Doc( 

2346 """ 

2347 The default status code to be used for the response. 

2348 

2349 You could override the status code by returning a response directly. 

2350 

2351 Read more about it in the 

2352 [FastAPI docs for Response Status Code](https://fastapi.tiangolo.com/tutorial/response-status-code/). 

2353 """ 

2354 ), 

2355 ] = None, 

2356 tags: Annotated[ 

2357 Optional[List[Union[str, Enum]]], 

2358 Doc( 

2359 """ 

2360 A list of tags to be applied to the *path operation*. 

2361 

2362 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

2363 

2364 Read more about it in the 

2365 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/#tags). 

2366 """ 

2367 ), 

2368 ] = None, 

2369 dependencies: Annotated[ 

2370 Optional[Sequence[Depends]], 

2371 Doc( 

2372 """ 

2373 A list of dependencies (using `Depends()`) to be applied to the 

2374 *path operation*. 

2375 

2376 Read more about it in the 

2377 [FastAPI docs for Dependencies in path operation decorators](https://fastapi.tiangolo.com/tutorial/dependencies/dependencies-in-path-operation-decorators/). 

2378 """ 

2379 ), 

2380 ] = None, 

2381 summary: Annotated[ 

2382 Optional[str], 

2383 Doc( 

2384 """ 

2385 A summary for the *path operation*. 

2386 

2387 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

2388 

2389 Read more about it in the 

2390 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/). 

2391 """ 

2392 ), 

2393 ] = None, 

2394 description: Annotated[ 

2395 Optional[str], 

2396 Doc( 

2397 """ 

2398 A description for the *path operation*. 

2399 

2400 If not provided, it will be extracted automatically from the docstring 

2401 of the *path operation function*. 

2402 

2403 It can contain Markdown. 

2404 

2405 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

2406 

2407 Read more about it in the 

2408 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/). 

2409 """ 

2410 ), 

2411 ] = None, 

2412 response_description: Annotated[ 

2413 str, 

2414 Doc( 

2415 """ 

2416 The description for the default response. 

2417 

2418 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

2419 """ 

2420 ), 

2421 ] = "Successful Response", 

2422 responses: Annotated[ 

2423 Optional[Dict[Union[int, str], Dict[str, Any]]], 

2424 Doc( 

2425 """ 

2426 Additional responses that could be returned by this *path operation*. 

2427 

2428 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

2429 """ 

2430 ), 

2431 ] = None, 

2432 deprecated: Annotated[ 

2433 Optional[bool], 

2434 Doc( 

2435 """ 

2436 Mark this *path operation* as deprecated. 

2437 

2438 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

2439 """ 

2440 ), 

2441 ] = None, 

2442 operation_id: Annotated[ 

2443 Optional[str], 

2444 Doc( 

2445 """ 

2446 Custom operation ID to be used by this *path operation*. 

2447 

2448 By default, it is generated automatically. 

2449 

2450 If you provide a custom operation ID, you need to make sure it is 

2451 unique for the whole API. 

2452 

2453 You can customize the 

2454 operation ID generation with the parameter 

2455 `generate_unique_id_function` in the `FastAPI` class. 

2456 

2457 Read more about it in the 

2458 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function). 

2459 """ 

2460 ), 

2461 ] = None, 

2462 response_model_include: Annotated[ 

2463 Optional[IncEx], 

2464 Doc( 

2465 """ 

2466 Configuration passed to Pydantic to include only certain fields in the 

2467 response data. 

2468 

2469 Read more about it in the 

2470 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude). 

2471 """ 

2472 ), 

2473 ] = None, 

2474 response_model_exclude: Annotated[ 

2475 Optional[IncEx], 

2476 Doc( 

2477 """ 

2478 Configuration passed to Pydantic to exclude certain fields in the 

2479 response data. 

2480 

2481 Read more about it in the 

2482 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude). 

2483 """ 

2484 ), 

2485 ] = None, 

2486 response_model_by_alias: Annotated[ 

2487 bool, 

2488 Doc( 

2489 """ 

2490 Configuration passed to Pydantic to define if the response model 

2491 should be serialized by alias when an alias is used. 

2492 

2493 Read more about it in the 

2494 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude). 

2495 """ 

2496 ), 

2497 ] = True, 

2498 response_model_exclude_unset: Annotated[ 

2499 bool, 

2500 Doc( 

2501 """ 

2502 Configuration passed to Pydantic to define if the response data 

2503 should have all the fields, including the ones that were not set and 

2504 have their default values. This is different from 

2505 `response_model_exclude_defaults` in that if the fields are set, 

2506 they will be included in the response, even if the value is the same 

2507 as the default. 

2508 

2509 When `True`, default values are omitted from the response. 

2510 

2511 Read more about it in the 

2512 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter). 

2513 """ 

2514 ), 

2515 ] = False, 

2516 response_model_exclude_defaults: Annotated[ 

2517 bool, 

2518 Doc( 

2519 """ 

2520 Configuration passed to Pydantic to define if the response data 

2521 should have all the fields, including the ones that have the same value 

2522 as the default. This is different from `response_model_exclude_unset` 

2523 in that if the fields are set but contain the same default values, 

2524 they will be excluded from the response. 

2525 

2526 When `True`, default values are omitted from the response. 

2527 

2528 Read more about it in the 

2529 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter). 

2530 """ 

2531 ), 

2532 ] = False, 

2533 response_model_exclude_none: Annotated[ 

2534 bool, 

2535 Doc( 

2536 """ 

2537 Configuration passed to Pydantic to define if the response data should 

2538 exclude fields set to `None`. 

2539 

2540 This is much simpler (less smart) than `response_model_exclude_unset` 

2541 and `response_model_exclude_defaults`. You probably want to use one of 

2542 those two instead of this one, as those allow returning `None` values 

2543 when it makes sense. 

2544 

2545 Read more about it in the 

2546 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_exclude_none). 

2547 """ 

2548 ), 

2549 ] = False, 

2550 include_in_schema: Annotated[ 

2551 bool, 

2552 Doc( 

2553 """ 

2554 Include this *path operation* in the generated OpenAPI schema. 

2555 

2556 This affects the generated OpenAPI (e.g. visible at `/docs`). 

2557 

2558 Read more about it in the 

2559 [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi). 

2560 """ 

2561 ), 

2562 ] = True, 

2563 response_class: Annotated[ 

2564 Type[Response], 

2565 Doc( 

2566 """ 

2567 Response class to be used for this *path operation*. 

2568 

2569 This will not be used if you return a response directly. 

2570 

2571 Read more about it in the 

2572 [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#redirectresponse). 

2573 """ 

2574 ), 

2575 ] = Default(JSONResponse), 

2576 name: Annotated[ 

2577 Optional[str], 

2578 Doc( 

2579 """ 

2580 Name for this *path operation*. Only used internally. 

2581 """ 

2582 ), 

2583 ] = None, 

2584 callbacks: Annotated[ 

2585 Optional[List[BaseRoute]], 

2586 Doc( 

2587 """ 

2588 List of *path operations* that will be used as OpenAPI callbacks. 

2589 

2590 This is only for OpenAPI documentation, the callbacks won't be used 

2591 directly. 

2592 

2593 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

2594 

2595 Read more about it in the 

2596 [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/). 

2597 """ 

2598 ), 

2599 ] = None, 

2600 openapi_extra: Annotated[ 

2601 Optional[Dict[str, Any]], 

2602 Doc( 

2603 """ 

2604 Extra metadata to be included in the OpenAPI schema for this *path 

2605 operation*. 

2606 

2607 Read more about it in the 

2608 [FastAPI docs for Path Operation Advanced Configuration](https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#custom-openapi-path-operation-schema). 

2609 """ 

2610 ), 

2611 ] = None, 

2612 generate_unique_id_function: Annotated[ 

2613 Callable[[routing.APIRoute], str], 

2614 Doc( 

2615 """ 

2616 Customize the function used to generate unique IDs for the *path 

2617 operations* shown in the generated OpenAPI. 

2618 

2619 This is particularly useful when automatically generating clients or 

2620 SDKs for your API. 

2621 

2622 Read more about it in the 

2623 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function). 

2624 """ 

2625 ), 

2626 ] = Default(generate_unique_id), 

2627 ) -> Callable[[DecoratedCallable], DecoratedCallable]: 

2628 """ 

2629 Add a *path operation* using an HTTP POST operation. 

2630 

2631 ## Example 

2632 

2633 ```python 

2634 from fastapi import FastAPI 

2635 from pydantic import BaseModel 

2636 

2637 class Item(BaseModel): 

2638 name: str 

2639 description: str | None = None 

2640 

2641 app = FastAPI() 

2642 

2643 @app.post("/items/") 

2644 def create_item(item: Item): 

2645 return {"message": "Item created"} 

2646 ``` 

2647 """ 

2648 return self.router.post( 2a =b?b@bo = p q r s t ? MeNeOePeQeReSeTeUeVeWeAbBbCbu v Db|b}bFbw @ icb ocpcqcx [ y z A B C ] *e+e,e-e.e/e:e;e=e?e@eHbIbJbD E KbxcycMbF ^ Icc OcPcQcG _ H I J K L ` lfmfnfofpfqfrfsftfufvfObPbQbM N RbXcYcZc{ 0c1cTbO (c} )cd /c:c;cP ~ Q R S T U abQfRfSfTfUfVfWfXfYfZf0fVbWbXbV W Yb_c`c{cbb|c}c0bX mddbnde tdudvdY ebZ 0 1 2 3 fb.f/f:f;f=f?f@f[f]f^f_f2b3b4b4 5 5bCdDdEdgbFdGd7b6 UdibVdf 1d2d3d7 jb8 9 ! # $ kbpgqgrgsgtgugvgwgxgygzg9b!b#b% ' $b!d#d$dlb%d'd'b( [dnb]dg }d~dae) ob* + , - . pbUgVgWgXgYgZg0g1g2g3g4g)b*b+b/ : ,bfegeqbheie.b; wesbxe

2649 path, 

2650 response_model=response_model, 

2651 status_code=status_code, 

2652 tags=tags, 

2653 dependencies=dependencies, 

2654 summary=summary, 

2655 description=description, 

2656 response_description=response_description, 

2657 responses=responses, 

2658 deprecated=deprecated, 

2659 operation_id=operation_id, 

2660 response_model_include=response_model_include, 

2661 response_model_exclude=response_model_exclude, 

2662 response_model_by_alias=response_model_by_alias, 

2663 response_model_exclude_unset=response_model_exclude_unset, 

2664 response_model_exclude_defaults=response_model_exclude_defaults, 

2665 response_model_exclude_none=response_model_exclude_none, 

2666 include_in_schema=include_in_schema, 

2667 response_class=response_class, 

2668 name=name, 

2669 callbacks=callbacks, 

2670 openapi_extra=openapi_extra, 

2671 generate_unique_id_function=generate_unique_id_function, 

2672 ) 

2673 

2674 def delete( 2a b c d e f g ^U

2675 self, 

2676 path: Annotated[ 

2677 str, 

2678 Doc( 

2679 """ 

2680 The URL path to be used for this *path operation*. 

2681 

2682 For example, in `http://example.com/items`, the path is `/items`. 

2683 """ 

2684 ), 

2685 ], 

2686 *, 

2687 response_model: Annotated[ 

2688 Any, 

2689 Doc( 

2690 """ 

2691 The type to use for the response. 

2692 

2693 It could be any valid Pydantic *field* type. So, it doesn't have to 

2694 be a Pydantic model, it could be other things, like a `list`, `dict`, 

2695 etc. 

2696 

2697 It will be used for: 

2698 

2699 * Documentation: the generated OpenAPI (and the UI at `/docs`) will 

2700 show it as the response (JSON Schema). 

2701 * Serialization: you could return an arbitrary object and the 

2702 `response_model` would be used to serialize that object into the 

2703 corresponding JSON. 

2704 * Filtering: the JSON sent to the client will only contain the data 

2705 (fields) defined in the `response_model`. If you returned an object 

2706 that contains an attribute `password` but the `response_model` does 

2707 not include that field, the JSON sent to the client would not have 

2708 that `password`. 

2709 * Validation: whatever you return will be serialized with the 

2710 `response_model`, converting any data as necessary to generate the 

2711 corresponding JSON. But if the data in the object returned is not 

2712 valid, that would mean a violation of the contract with the client, 

2713 so it's an error from the API developer. So, FastAPI will raise an 

2714 error and return a 500 error code (Internal Server Error). 

2715 

2716 Read more about it in the 

2717 [FastAPI docs for Response Model](https://fastapi.tiangolo.com/tutorial/response-model/). 

2718 """ 

2719 ), 

2720 ] = Default(None), 

2721 status_code: Annotated[ 

2722 Optional[int], 

2723 Doc( 

2724 """ 

2725 The default status code to be used for the response. 

2726 

2727 You could override the status code by returning a response directly. 

2728 

2729 Read more about it in the 

2730 [FastAPI docs for Response Status Code](https://fastapi.tiangolo.com/tutorial/response-status-code/). 

2731 """ 

2732 ), 

2733 ] = None, 

2734 tags: Annotated[ 

2735 Optional[List[Union[str, Enum]]], 

2736 Doc( 

2737 """ 

2738 A list of tags to be applied to the *path operation*. 

2739 

2740 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

2741 

2742 Read more about it in the 

2743 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/#tags). 

2744 """ 

2745 ), 

2746 ] = None, 

2747 dependencies: Annotated[ 

2748 Optional[Sequence[Depends]], 

2749 Doc( 

2750 """ 

2751 A list of dependencies (using `Depends()`) to be applied to the 

2752 *path operation*. 

2753 

2754 Read more about it in the 

2755 [FastAPI docs for Dependencies in path operation decorators](https://fastapi.tiangolo.com/tutorial/dependencies/dependencies-in-path-operation-decorators/). 

2756 """ 

2757 ), 

2758 ] = None, 

2759 summary: Annotated[ 

2760 Optional[str], 

2761 Doc( 

2762 """ 

2763 A summary for the *path operation*. 

2764 

2765 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

2766 

2767 Read more about it in the 

2768 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/). 

2769 """ 

2770 ), 

2771 ] = None, 

2772 description: Annotated[ 

2773 Optional[str], 

2774 Doc( 

2775 """ 

2776 A description for the *path operation*. 

2777 

2778 If not provided, it will be extracted automatically from the docstring 

2779 of the *path operation function*. 

2780 

2781 It can contain Markdown. 

2782 

2783 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

2784 

2785 Read more about it in the 

2786 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/). 

2787 """ 

2788 ), 

2789 ] = None, 

2790 response_description: Annotated[ 

2791 str, 

2792 Doc( 

2793 """ 

2794 The description for the default response. 

2795 

2796 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

2797 """ 

2798 ), 

2799 ] = "Successful Response", 

2800 responses: Annotated[ 

2801 Optional[Dict[Union[int, str], Dict[str, Any]]], 

2802 Doc( 

2803 """ 

2804 Additional responses that could be returned by this *path operation*. 

2805 

2806 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

2807 """ 

2808 ), 

2809 ] = None, 

2810 deprecated: Annotated[ 

2811 Optional[bool], 

2812 Doc( 

2813 """ 

2814 Mark this *path operation* as deprecated. 

2815 

2816 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

2817 """ 

2818 ), 

2819 ] = None, 

2820 operation_id: Annotated[ 

2821 Optional[str], 

2822 Doc( 

2823 """ 

2824 Custom operation ID to be used by this *path operation*. 

2825 

2826 By default, it is generated automatically. 

2827 

2828 If you provide a custom operation ID, you need to make sure it is 

2829 unique for the whole API. 

2830 

2831 You can customize the 

2832 operation ID generation with the parameter 

2833 `generate_unique_id_function` in the `FastAPI` class. 

2834 

2835 Read more about it in the 

2836 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function). 

2837 """ 

2838 ), 

2839 ] = None, 

2840 response_model_include: Annotated[ 

2841 Optional[IncEx], 

2842 Doc( 

2843 """ 

2844 Configuration passed to Pydantic to include only certain fields in the 

2845 response data. 

2846 

2847 Read more about it in the 

2848 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude). 

2849 """ 

2850 ), 

2851 ] = None, 

2852 response_model_exclude: Annotated[ 

2853 Optional[IncEx], 

2854 Doc( 

2855 """ 

2856 Configuration passed to Pydantic to exclude certain fields in the 

2857 response data. 

2858 

2859 Read more about it in the 

2860 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude). 

2861 """ 

2862 ), 

2863 ] = None, 

2864 response_model_by_alias: Annotated[ 

2865 bool, 

2866 Doc( 

2867 """ 

2868 Configuration passed to Pydantic to define if the response model 

2869 should be serialized by alias when an alias is used. 

2870 

2871 Read more about it in the 

2872 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude). 

2873 """ 

2874 ), 

2875 ] = True, 

2876 response_model_exclude_unset: Annotated[ 

2877 bool, 

2878 Doc( 

2879 """ 

2880 Configuration passed to Pydantic to define if the response data 

2881 should have all the fields, including the ones that were not set and 

2882 have their default values. This is different from 

2883 `response_model_exclude_defaults` in that if the fields are set, 

2884 they will be included in the response, even if the value is the same 

2885 as the default. 

2886 

2887 When `True`, default values are omitted from the response. 

2888 

2889 Read more about it in the 

2890 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter). 

2891 """ 

2892 ), 

2893 ] = False, 

2894 response_model_exclude_defaults: Annotated[ 

2895 bool, 

2896 Doc( 

2897 """ 

2898 Configuration passed to Pydantic to define if the response data 

2899 should have all the fields, including the ones that have the same value 

2900 as the default. This is different from `response_model_exclude_unset` 

2901 in that if the fields are set but contain the same default values, 

2902 they will be excluded from the response. 

2903 

2904 When `True`, default values are omitted from the response. 

2905 

2906 Read more about it in the 

2907 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter). 

2908 """ 

2909 ), 

2910 ] = False, 

2911 response_model_exclude_none: Annotated[ 

2912 bool, 

2913 Doc( 

2914 """ 

2915 Configuration passed to Pydantic to define if the response data should 

2916 exclude fields set to `None`. 

2917 

2918 This is much simpler (less smart) than `response_model_exclude_unset` 

2919 and `response_model_exclude_defaults`. You probably want to use one of 

2920 those two instead of this one, as those allow returning `None` values 

2921 when it makes sense. 

2922 

2923 Read more about it in the 

2924 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_exclude_none). 

2925 """ 

2926 ), 

2927 ] = False, 

2928 include_in_schema: Annotated[ 

2929 bool, 

2930 Doc( 

2931 """ 

2932 Include this *path operation* in the generated OpenAPI schema. 

2933 

2934 This affects the generated OpenAPI (e.g. visible at `/docs`). 

2935 

2936 Read more about it in the 

2937 [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi). 

2938 """ 

2939 ), 

2940 ] = True, 

2941 response_class: Annotated[ 

2942 Type[Response], 

2943 Doc( 

2944 """ 

2945 Response class to be used for this *path operation*. 

2946 

2947 This will not be used if you return a response directly. 

2948 

2949 Read more about it in the 

2950 [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#redirectresponse). 

2951 """ 

2952 ), 

2953 ] = Default(JSONResponse), 

2954 name: Annotated[ 

2955 Optional[str], 

2956 Doc( 

2957 """ 

2958 Name for this *path operation*. Only used internally. 

2959 """ 

2960 ), 

2961 ] = None, 

2962 callbacks: Annotated[ 

2963 Optional[List[BaseRoute]], 

2964 Doc( 

2965 """ 

2966 List of *path operations* that will be used as OpenAPI callbacks. 

2967 

2968 This is only for OpenAPI documentation, the callbacks won't be used 

2969 directly. 

2970 

2971 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

2972 

2973 Read more about it in the 

2974 [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/). 

2975 """ 

2976 ), 

2977 ] = None, 

2978 openapi_extra: Annotated[ 

2979 Optional[Dict[str, Any]], 

2980 Doc( 

2981 """ 

2982 Extra metadata to be included in the OpenAPI schema for this *path 

2983 operation*. 

2984 

2985 Read more about it in the 

2986 [FastAPI docs for Path Operation Advanced Configuration](https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#custom-openapi-path-operation-schema). 

2987 """ 

2988 ), 

2989 ] = None, 

2990 generate_unique_id_function: Annotated[ 

2991 Callable[[routing.APIRoute], str], 

2992 Doc( 

2993 """ 

2994 Customize the function used to generate unique IDs for the *path 

2995 operations* shown in the generated OpenAPI. 

2996 

2997 This is particularly useful when automatically generating clients or 

2998 SDKs for your API. 

2999 

3000 Read more about it in the 

3001 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function). 

3002 """ 

3003 ), 

3004 ] = Default(generate_unique_id), 

3005 ) -> Callable[[DecoratedCallable], DecoratedCallable]: 

3006 """ 

3007 Add a *path operation* using an HTTP DELETE operation. 

3008 

3009 ## Example 

3010 

3011 ```python 

3012 from fastapi import FastAPI 

3013 

3014 app = FastAPI() 

3015 

3016 @app.delete("/items/{item_id}") 

3017 def delete_item(item_id: str): 

3018 return {"message": "Item deleted"} 

3019 ``` 

3020 """ 

3021 return self.router.delete( 1abcdefg

3022 path, 

3023 response_model=response_model, 

3024 status_code=status_code, 

3025 tags=tags, 

3026 dependencies=dependencies, 

3027 summary=summary, 

3028 description=description, 

3029 response_description=response_description, 

3030 responses=responses, 

3031 deprecated=deprecated, 

3032 operation_id=operation_id, 

3033 response_model_include=response_model_include, 

3034 response_model_exclude=response_model_exclude, 

3035 response_model_by_alias=response_model_by_alias, 

3036 response_model_exclude_unset=response_model_exclude_unset, 

3037 response_model_exclude_defaults=response_model_exclude_defaults, 

3038 response_model_exclude_none=response_model_exclude_none, 

3039 include_in_schema=include_in_schema, 

3040 response_class=response_class, 

3041 name=name, 

3042 callbacks=callbacks, 

3043 openapi_extra=openapi_extra, 

3044 generate_unique_id_function=generate_unique_id_function, 

3045 ) 

3046 

3047 def options( 2a b c d e f g ^U

3048 self, 

3049 path: Annotated[ 

3050 str, 

3051 Doc( 

3052 """ 

3053 The URL path to be used for this *path operation*. 

3054 

3055 For example, in `http://example.com/items`, the path is `/items`. 

3056 """ 

3057 ), 

3058 ], 

3059 *, 

3060 response_model: Annotated[ 

3061 Any, 

3062 Doc( 

3063 """ 

3064 The type to use for the response. 

3065 

3066 It could be any valid Pydantic *field* type. So, it doesn't have to 

3067 be a Pydantic model, it could be other things, like a `list`, `dict`, 

3068 etc. 

3069 

3070 It will be used for: 

3071 

3072 * Documentation: the generated OpenAPI (and the UI at `/docs`) will 

3073 show it as the response (JSON Schema). 

3074 * Serialization: you could return an arbitrary object and the 

3075 `response_model` would be used to serialize that object into the 

3076 corresponding JSON. 

3077 * Filtering: the JSON sent to the client will only contain the data 

3078 (fields) defined in the `response_model`. If you returned an object 

3079 that contains an attribute `password` but the `response_model` does 

3080 not include that field, the JSON sent to the client would not have 

3081 that `password`. 

3082 * Validation: whatever you return will be serialized with the 

3083 `response_model`, converting any data as necessary to generate the 

3084 corresponding JSON. But if the data in the object returned is not 

3085 valid, that would mean a violation of the contract with the client, 

3086 so it's an error from the API developer. So, FastAPI will raise an 

3087 error and return a 500 error code (Internal Server Error). 

3088 

3089 Read more about it in the 

3090 [FastAPI docs for Response Model](https://fastapi.tiangolo.com/tutorial/response-model/). 

3091 """ 

3092 ), 

3093 ] = Default(None), 

3094 status_code: Annotated[ 

3095 Optional[int], 

3096 Doc( 

3097 """ 

3098 The default status code to be used for the response. 

3099 

3100 You could override the status code by returning a response directly. 

3101 

3102 Read more about it in the 

3103 [FastAPI docs for Response Status Code](https://fastapi.tiangolo.com/tutorial/response-status-code/). 

3104 """ 

3105 ), 

3106 ] = None, 

3107 tags: Annotated[ 

3108 Optional[List[Union[str, Enum]]], 

3109 Doc( 

3110 """ 

3111 A list of tags to be applied to the *path operation*. 

3112 

3113 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

3114 

3115 Read more about it in the 

3116 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/#tags). 

3117 """ 

3118 ), 

3119 ] = None, 

3120 dependencies: Annotated[ 

3121 Optional[Sequence[Depends]], 

3122 Doc( 

3123 """ 

3124 A list of dependencies (using `Depends()`) to be applied to the 

3125 *path operation*. 

3126 

3127 Read more about it in the 

3128 [FastAPI docs for Dependencies in path operation decorators](https://fastapi.tiangolo.com/tutorial/dependencies/dependencies-in-path-operation-decorators/). 

3129 """ 

3130 ), 

3131 ] = None, 

3132 summary: Annotated[ 

3133 Optional[str], 

3134 Doc( 

3135 """ 

3136 A summary for the *path operation*. 

3137 

3138 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

3139 

3140 Read more about it in the 

3141 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/). 

3142 """ 

3143 ), 

3144 ] = None, 

3145 description: Annotated[ 

3146 Optional[str], 

3147 Doc( 

3148 """ 

3149 A description for the *path operation*. 

3150 

3151 If not provided, it will be extracted automatically from the docstring 

3152 of the *path operation function*. 

3153 

3154 It can contain Markdown. 

3155 

3156 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

3157 

3158 Read more about it in the 

3159 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/). 

3160 """ 

3161 ), 

3162 ] = None, 

3163 response_description: Annotated[ 

3164 str, 

3165 Doc( 

3166 """ 

3167 The description for the default response. 

3168 

3169 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

3170 """ 

3171 ), 

3172 ] = "Successful Response", 

3173 responses: Annotated[ 

3174 Optional[Dict[Union[int, str], Dict[str, Any]]], 

3175 Doc( 

3176 """ 

3177 Additional responses that could be returned by this *path operation*. 

3178 

3179 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

3180 """ 

3181 ), 

3182 ] = None, 

3183 deprecated: Annotated[ 

3184 Optional[bool], 

3185 Doc( 

3186 """ 

3187 Mark this *path operation* as deprecated. 

3188 

3189 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

3190 """ 

3191 ), 

3192 ] = None, 

3193 operation_id: Annotated[ 

3194 Optional[str], 

3195 Doc( 

3196 """ 

3197 Custom operation ID to be used by this *path operation*. 

3198 

3199 By default, it is generated automatically. 

3200 

3201 If you provide a custom operation ID, you need to make sure it is 

3202 unique for the whole API. 

3203 

3204 You can customize the 

3205 operation ID generation with the parameter 

3206 `generate_unique_id_function` in the `FastAPI` class. 

3207 

3208 Read more about it in the 

3209 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function). 

3210 """ 

3211 ), 

3212 ] = None, 

3213 response_model_include: Annotated[ 

3214 Optional[IncEx], 

3215 Doc( 

3216 """ 

3217 Configuration passed to Pydantic to include only certain fields in the 

3218 response data. 

3219 

3220 Read more about it in the 

3221 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude). 

3222 """ 

3223 ), 

3224 ] = None, 

3225 response_model_exclude: Annotated[ 

3226 Optional[IncEx], 

3227 Doc( 

3228 """ 

3229 Configuration passed to Pydantic to exclude certain fields in the 

3230 response data. 

3231 

3232 Read more about it in the 

3233 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude). 

3234 """ 

3235 ), 

3236 ] = None, 

3237 response_model_by_alias: Annotated[ 

3238 bool, 

3239 Doc( 

3240 """ 

3241 Configuration passed to Pydantic to define if the response model 

3242 should be serialized by alias when an alias is used. 

3243 

3244 Read more about it in the 

3245 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude). 

3246 """ 

3247 ), 

3248 ] = True, 

3249 response_model_exclude_unset: Annotated[ 

3250 bool, 

3251 Doc( 

3252 """ 

3253 Configuration passed to Pydantic to define if the response data 

3254 should have all the fields, including the ones that were not set and 

3255 have their default values. This is different from 

3256 `response_model_exclude_defaults` in that if the fields are set, 

3257 they will be included in the response, even if the value is the same 

3258 as the default. 

3259 

3260 When `True`, default values are omitted from the response. 

3261 

3262 Read more about it in the 

3263 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter). 

3264 """ 

3265 ), 

3266 ] = False, 

3267 response_model_exclude_defaults: Annotated[ 

3268 bool, 

3269 Doc( 

3270 """ 

3271 Configuration passed to Pydantic to define if the response data 

3272 should have all the fields, including the ones that have the same value 

3273 as the default. This is different from `response_model_exclude_unset` 

3274 in that if the fields are set but contain the same default values, 

3275 they will be excluded from the response. 

3276 

3277 When `True`, default values are omitted from the response. 

3278 

3279 Read more about it in the 

3280 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter). 

3281 """ 

3282 ), 

3283 ] = False, 

3284 response_model_exclude_none: Annotated[ 

3285 bool, 

3286 Doc( 

3287 """ 

3288 Configuration passed to Pydantic to define if the response data should 

3289 exclude fields set to `None`. 

3290 

3291 This is much simpler (less smart) than `response_model_exclude_unset` 

3292 and `response_model_exclude_defaults`. You probably want to use one of 

3293 those two instead of this one, as those allow returning `None` values 

3294 when it makes sense. 

3295 

3296 Read more about it in the 

3297 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_exclude_none). 

3298 """ 

3299 ), 

3300 ] = False, 

3301 include_in_schema: Annotated[ 

3302 bool, 

3303 Doc( 

3304 """ 

3305 Include this *path operation* in the generated OpenAPI schema. 

3306 

3307 This affects the generated OpenAPI (e.g. visible at `/docs`). 

3308 

3309 Read more about it in the 

3310 [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi). 

3311 """ 

3312 ), 

3313 ] = True, 

3314 response_class: Annotated[ 

3315 Type[Response], 

3316 Doc( 

3317 """ 

3318 Response class to be used for this *path operation*. 

3319 

3320 This will not be used if you return a response directly. 

3321 

3322 Read more about it in the 

3323 [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#redirectresponse). 

3324 """ 

3325 ), 

3326 ] = Default(JSONResponse), 

3327 name: Annotated[ 

3328 Optional[str], 

3329 Doc( 

3330 """ 

3331 Name for this *path operation*. Only used internally. 

3332 """ 

3333 ), 

3334 ] = None, 

3335 callbacks: Annotated[ 

3336 Optional[List[BaseRoute]], 

3337 Doc( 

3338 """ 

3339 List of *path operations* that will be used as OpenAPI callbacks. 

3340 

3341 This is only for OpenAPI documentation, the callbacks won't be used 

3342 directly. 

3343 

3344 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

3345 

3346 Read more about it in the 

3347 [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/). 

3348 """ 

3349 ), 

3350 ] = None, 

3351 openapi_extra: Annotated[ 

3352 Optional[Dict[str, Any]], 

3353 Doc( 

3354 """ 

3355 Extra metadata to be included in the OpenAPI schema for this *path 

3356 operation*. 

3357 

3358 Read more about it in the 

3359 [FastAPI docs for Path Operation Advanced Configuration](https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#custom-openapi-path-operation-schema). 

3360 """ 

3361 ), 

3362 ] = None, 

3363 generate_unique_id_function: Annotated[ 

3364 Callable[[routing.APIRoute], str], 

3365 Doc( 

3366 """ 

3367 Customize the function used to generate unique IDs for the *path 

3368 operations* shown in the generated OpenAPI. 

3369 

3370 This is particularly useful when automatically generating clients or 

3371 SDKs for your API. 

3372 

3373 Read more about it in the 

3374 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function). 

3375 """ 

3376 ), 

3377 ] = Default(generate_unique_id), 

3378 ) -> Callable[[DecoratedCallable], DecoratedCallable]: 

3379 """ 

3380 Add a *path operation* using an HTTP OPTIONS operation. 

3381 

3382 ## Example 

3383 

3384 ```python 

3385 from fastapi import FastAPI 

3386 

3387 app = FastAPI() 

3388 

3389 @app.options("/items/") 

3390 def get_item_options(): 

3391 return {"additions": ["Aji", "Guacamole"]} 

3392 ``` 

3393 """ 

3394 return self.router.options( 1abcdefg

3395 path, 

3396 response_model=response_model, 

3397 status_code=status_code, 

3398 tags=tags, 

3399 dependencies=dependencies, 

3400 summary=summary, 

3401 description=description, 

3402 response_description=response_description, 

3403 responses=responses, 

3404 deprecated=deprecated, 

3405 operation_id=operation_id, 

3406 response_model_include=response_model_include, 

3407 response_model_exclude=response_model_exclude, 

3408 response_model_by_alias=response_model_by_alias, 

3409 response_model_exclude_unset=response_model_exclude_unset, 

3410 response_model_exclude_defaults=response_model_exclude_defaults, 

3411 response_model_exclude_none=response_model_exclude_none, 

3412 include_in_schema=include_in_schema, 

3413 response_class=response_class, 

3414 name=name, 

3415 callbacks=callbacks, 

3416 openapi_extra=openapi_extra, 

3417 generate_unique_id_function=generate_unique_id_function, 

3418 ) 

3419 

3420 def head( 2a b c d e f g ^U

3421 self, 

3422 path: Annotated[ 

3423 str, 

3424 Doc( 

3425 """ 

3426 The URL path to be used for this *path operation*. 

3427 

3428 For example, in `http://example.com/items`, the path is `/items`. 

3429 """ 

3430 ), 

3431 ], 

3432 *, 

3433 response_model: Annotated[ 

3434 Any, 

3435 Doc( 

3436 """ 

3437 The type to use for the response. 

3438 

3439 It could be any valid Pydantic *field* type. So, it doesn't have to 

3440 be a Pydantic model, it could be other things, like a `list`, `dict`, 

3441 etc. 

3442 

3443 It will be used for: 

3444 

3445 * Documentation: the generated OpenAPI (and the UI at `/docs`) will 

3446 show it as the response (JSON Schema). 

3447 * Serialization: you could return an arbitrary object and the 

3448 `response_model` would be used to serialize that object into the 

3449 corresponding JSON. 

3450 * Filtering: the JSON sent to the client will only contain the data 

3451 (fields) defined in the `response_model`. If you returned an object 

3452 that contains an attribute `password` but the `response_model` does 

3453 not include that field, the JSON sent to the client would not have 

3454 that `password`. 

3455 * Validation: whatever you return will be serialized with the 

3456 `response_model`, converting any data as necessary to generate the 

3457 corresponding JSON. But if the data in the object returned is not 

3458 valid, that would mean a violation of the contract with the client, 

3459 so it's an error from the API developer. So, FastAPI will raise an 

3460 error and return a 500 error code (Internal Server Error). 

3461 

3462 Read more about it in the 

3463 [FastAPI docs for Response Model](https://fastapi.tiangolo.com/tutorial/response-model/). 

3464 """ 

3465 ), 

3466 ] = Default(None), 

3467 status_code: Annotated[ 

3468 Optional[int], 

3469 Doc( 

3470 """ 

3471 The default status code to be used for the response. 

3472 

3473 You could override the status code by returning a response directly. 

3474 

3475 Read more about it in the 

3476 [FastAPI docs for Response Status Code](https://fastapi.tiangolo.com/tutorial/response-status-code/). 

3477 """ 

3478 ), 

3479 ] = None, 

3480 tags: Annotated[ 

3481 Optional[List[Union[str, Enum]]], 

3482 Doc( 

3483 """ 

3484 A list of tags to be applied to the *path operation*. 

3485 

3486 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

3487 

3488 Read more about it in the 

3489 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/#tags). 

3490 """ 

3491 ), 

3492 ] = None, 

3493 dependencies: Annotated[ 

3494 Optional[Sequence[Depends]], 

3495 Doc( 

3496 """ 

3497 A list of dependencies (using `Depends()`) to be applied to the 

3498 *path operation*. 

3499 

3500 Read more about it in the 

3501 [FastAPI docs for Dependencies in path operation decorators](https://fastapi.tiangolo.com/tutorial/dependencies/dependencies-in-path-operation-decorators/). 

3502 """ 

3503 ), 

3504 ] = None, 

3505 summary: Annotated[ 

3506 Optional[str], 

3507 Doc( 

3508 """ 

3509 A summary for the *path operation*. 

3510 

3511 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

3512 

3513 Read more about it in the 

3514 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/). 

3515 """ 

3516 ), 

3517 ] = None, 

3518 description: Annotated[ 

3519 Optional[str], 

3520 Doc( 

3521 """ 

3522 A description for the *path operation*. 

3523 

3524 If not provided, it will be extracted automatically from the docstring 

3525 of the *path operation function*. 

3526 

3527 It can contain Markdown. 

3528 

3529 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

3530 

3531 Read more about it in the 

3532 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/). 

3533 """ 

3534 ), 

3535 ] = None, 

3536 response_description: Annotated[ 

3537 str, 

3538 Doc( 

3539 """ 

3540 The description for the default response. 

3541 

3542 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

3543 """ 

3544 ), 

3545 ] = "Successful Response", 

3546 responses: Annotated[ 

3547 Optional[Dict[Union[int, str], Dict[str, Any]]], 

3548 Doc( 

3549 """ 

3550 Additional responses that could be returned by this *path operation*. 

3551 

3552 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

3553 """ 

3554 ), 

3555 ] = None, 

3556 deprecated: Annotated[ 

3557 Optional[bool], 

3558 Doc( 

3559 """ 

3560 Mark this *path operation* as deprecated. 

3561 

3562 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

3563 """ 

3564 ), 

3565 ] = None, 

3566 operation_id: Annotated[ 

3567 Optional[str], 

3568 Doc( 

3569 """ 

3570 Custom operation ID to be used by this *path operation*. 

3571 

3572 By default, it is generated automatically. 

3573 

3574 If you provide a custom operation ID, you need to make sure it is 

3575 unique for the whole API. 

3576 

3577 You can customize the 

3578 operation ID generation with the parameter 

3579 `generate_unique_id_function` in the `FastAPI` class. 

3580 

3581 Read more about it in the 

3582 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function). 

3583 """ 

3584 ), 

3585 ] = None, 

3586 response_model_include: Annotated[ 

3587 Optional[IncEx], 

3588 Doc( 

3589 """ 

3590 Configuration passed to Pydantic to include only certain fields in the 

3591 response data. 

3592 

3593 Read more about it in the 

3594 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude). 

3595 """ 

3596 ), 

3597 ] = None, 

3598 response_model_exclude: Annotated[ 

3599 Optional[IncEx], 

3600 Doc( 

3601 """ 

3602 Configuration passed to Pydantic to exclude certain fields in the 

3603 response data. 

3604 

3605 Read more about it in the 

3606 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude). 

3607 """ 

3608 ), 

3609 ] = None, 

3610 response_model_by_alias: Annotated[ 

3611 bool, 

3612 Doc( 

3613 """ 

3614 Configuration passed to Pydantic to define if the response model 

3615 should be serialized by alias when an alias is used. 

3616 

3617 Read more about it in the 

3618 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude). 

3619 """ 

3620 ), 

3621 ] = True, 

3622 response_model_exclude_unset: Annotated[ 

3623 bool, 

3624 Doc( 

3625 """ 

3626 Configuration passed to Pydantic to define if the response data 

3627 should have all the fields, including the ones that were not set and 

3628 have their default values. This is different from 

3629 `response_model_exclude_defaults` in that if the fields are set, 

3630 they will be included in the response, even if the value is the same 

3631 as the default. 

3632 

3633 When `True`, default values are omitted from the response. 

3634 

3635 Read more about it in the 

3636 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter). 

3637 """ 

3638 ), 

3639 ] = False, 

3640 response_model_exclude_defaults: Annotated[ 

3641 bool, 

3642 Doc( 

3643 """ 

3644 Configuration passed to Pydantic to define if the response data 

3645 should have all the fields, including the ones that have the same value 

3646 as the default. This is different from `response_model_exclude_unset` 

3647 in that if the fields are set but contain the same default values, 

3648 they will be excluded from the response. 

3649 

3650 When `True`, default values are omitted from the response. 

3651 

3652 Read more about it in the 

3653 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter). 

3654 """ 

3655 ), 

3656 ] = False, 

3657 response_model_exclude_none: Annotated[ 

3658 bool, 

3659 Doc( 

3660 """ 

3661 Configuration passed to Pydantic to define if the response data should 

3662 exclude fields set to `None`. 

3663 

3664 This is much simpler (less smart) than `response_model_exclude_unset` 

3665 and `response_model_exclude_defaults`. You probably want to use one of 

3666 those two instead of this one, as those allow returning `None` values 

3667 when it makes sense. 

3668 

3669 Read more about it in the 

3670 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_exclude_none). 

3671 """ 

3672 ), 

3673 ] = False, 

3674 include_in_schema: Annotated[ 

3675 bool, 

3676 Doc( 

3677 """ 

3678 Include this *path operation* in the generated OpenAPI schema. 

3679 

3680 This affects the generated OpenAPI (e.g. visible at `/docs`). 

3681 

3682 Read more about it in the 

3683 [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi). 

3684 """ 

3685 ), 

3686 ] = True, 

3687 response_class: Annotated[ 

3688 Type[Response], 

3689 Doc( 

3690 """ 

3691 Response class to be used for this *path operation*. 

3692 

3693 This will not be used if you return a response directly. 

3694 

3695 Read more about it in the 

3696 [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#redirectresponse). 

3697 """ 

3698 ), 

3699 ] = Default(JSONResponse), 

3700 name: Annotated[ 

3701 Optional[str], 

3702 Doc( 

3703 """ 

3704 Name for this *path operation*. Only used internally. 

3705 """ 

3706 ), 

3707 ] = None, 

3708 callbacks: Annotated[ 

3709 Optional[List[BaseRoute]], 

3710 Doc( 

3711 """ 

3712 List of *path operations* that will be used as OpenAPI callbacks. 

3713 

3714 This is only for OpenAPI documentation, the callbacks won't be used 

3715 directly. 

3716 

3717 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

3718 

3719 Read more about it in the 

3720 [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/). 

3721 """ 

3722 ), 

3723 ] = None, 

3724 openapi_extra: Annotated[ 

3725 Optional[Dict[str, Any]], 

3726 Doc( 

3727 """ 

3728 Extra metadata to be included in the OpenAPI schema for this *path 

3729 operation*. 

3730 

3731 Read more about it in the 

3732 [FastAPI docs for Path Operation Advanced Configuration](https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#custom-openapi-path-operation-schema). 

3733 """ 

3734 ), 

3735 ] = None, 

3736 generate_unique_id_function: Annotated[ 

3737 Callable[[routing.APIRoute], str], 

3738 Doc( 

3739 """ 

3740 Customize the function used to generate unique IDs for the *path 

3741 operations* shown in the generated OpenAPI. 

3742 

3743 This is particularly useful when automatically generating clients or 

3744 SDKs for your API. 

3745 

3746 Read more about it in the 

3747 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function). 

3748 """ 

3749 ), 

3750 ] = Default(generate_unique_id), 

3751 ) -> Callable[[DecoratedCallable], DecoratedCallable]: 

3752 """ 

3753 Add a *path operation* using an HTTP HEAD operation. 

3754 

3755 ## Example 

3756 

3757 ```python 

3758 from fastapi import FastAPI, Response 

3759 

3760 app = FastAPI() 

3761 

3762 @app.head("/items/", status_code=204) 

3763 def get_items_headers(response: Response): 

3764 response.headers["X-Cat-Dog"] = "Alone in the world" 

3765 ``` 

3766 """ 

3767 return self.router.head( 1abcdefg

3768 path, 

3769 response_model=response_model, 

3770 status_code=status_code, 

3771 tags=tags, 

3772 dependencies=dependencies, 

3773 summary=summary, 

3774 description=description, 

3775 response_description=response_description, 

3776 responses=responses, 

3777 deprecated=deprecated, 

3778 operation_id=operation_id, 

3779 response_model_include=response_model_include, 

3780 response_model_exclude=response_model_exclude, 

3781 response_model_by_alias=response_model_by_alias, 

3782 response_model_exclude_unset=response_model_exclude_unset, 

3783 response_model_exclude_defaults=response_model_exclude_defaults, 

3784 response_model_exclude_none=response_model_exclude_none, 

3785 include_in_schema=include_in_schema, 

3786 response_class=response_class, 

3787 name=name, 

3788 callbacks=callbacks, 

3789 openapi_extra=openapi_extra, 

3790 generate_unique_id_function=generate_unique_id_function, 

3791 ) 

3792 

3793 def patch( 2a b c d e f g ^U

3794 self, 

3795 path: Annotated[ 

3796 str, 

3797 Doc( 

3798 """ 

3799 The URL path to be used for this *path operation*. 

3800 

3801 For example, in `http://example.com/items`, the path is `/items`. 

3802 """ 

3803 ), 

3804 ], 

3805 *, 

3806 response_model: Annotated[ 

3807 Any, 

3808 Doc( 

3809 """ 

3810 The type to use for the response. 

3811 

3812 It could be any valid Pydantic *field* type. So, it doesn't have to 

3813 be a Pydantic model, it could be other things, like a `list`, `dict`, 

3814 etc. 

3815 

3816 It will be used for: 

3817 

3818 * Documentation: the generated OpenAPI (and the UI at `/docs`) will 

3819 show it as the response (JSON Schema). 

3820 * Serialization: you could return an arbitrary object and the 

3821 `response_model` would be used to serialize that object into the 

3822 corresponding JSON. 

3823 * Filtering: the JSON sent to the client will only contain the data 

3824 (fields) defined in the `response_model`. If you returned an object 

3825 that contains an attribute `password` but the `response_model` does 

3826 not include that field, the JSON sent to the client would not have 

3827 that `password`. 

3828 * Validation: whatever you return will be serialized with the 

3829 `response_model`, converting any data as necessary to generate the 

3830 corresponding JSON. But if the data in the object returned is not 

3831 valid, that would mean a violation of the contract with the client, 

3832 so it's an error from the API developer. So, FastAPI will raise an 

3833 error and return a 500 error code (Internal Server Error). 

3834 

3835 Read more about it in the 

3836 [FastAPI docs for Response Model](https://fastapi.tiangolo.com/tutorial/response-model/). 

3837 """ 

3838 ), 

3839 ] = Default(None), 

3840 status_code: Annotated[ 

3841 Optional[int], 

3842 Doc( 

3843 """ 

3844 The default status code to be used for the response. 

3845 

3846 You could override the status code by returning a response directly. 

3847 

3848 Read more about it in the 

3849 [FastAPI docs for Response Status Code](https://fastapi.tiangolo.com/tutorial/response-status-code/). 

3850 """ 

3851 ), 

3852 ] = None, 

3853 tags: Annotated[ 

3854 Optional[List[Union[str, Enum]]], 

3855 Doc( 

3856 """ 

3857 A list of tags to be applied to the *path operation*. 

3858 

3859 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

3860 

3861 Read more about it in the 

3862 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/#tags). 

3863 """ 

3864 ), 

3865 ] = None, 

3866 dependencies: Annotated[ 

3867 Optional[Sequence[Depends]], 

3868 Doc( 

3869 """ 

3870 A list of dependencies (using `Depends()`) to be applied to the 

3871 *path operation*. 

3872 

3873 Read more about it in the 

3874 [FastAPI docs for Dependencies in path operation decorators](https://fastapi.tiangolo.com/tutorial/dependencies/dependencies-in-path-operation-decorators/). 

3875 """ 

3876 ), 

3877 ] = None, 

3878 summary: Annotated[ 

3879 Optional[str], 

3880 Doc( 

3881 """ 

3882 A summary for the *path operation*. 

3883 

3884 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

3885 

3886 Read more about it in the 

3887 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/). 

3888 """ 

3889 ), 

3890 ] = None, 

3891 description: Annotated[ 

3892 Optional[str], 

3893 Doc( 

3894 """ 

3895 A description for the *path operation*. 

3896 

3897 If not provided, it will be extracted automatically from the docstring 

3898 of the *path operation function*. 

3899 

3900 It can contain Markdown. 

3901 

3902 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

3903 

3904 Read more about it in the 

3905 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/). 

3906 """ 

3907 ), 

3908 ] = None, 

3909 response_description: Annotated[ 

3910 str, 

3911 Doc( 

3912 """ 

3913 The description for the default response. 

3914 

3915 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

3916 """ 

3917 ), 

3918 ] = "Successful Response", 

3919 responses: Annotated[ 

3920 Optional[Dict[Union[int, str], Dict[str, Any]]], 

3921 Doc( 

3922 """ 

3923 Additional responses that could be returned by this *path operation*. 

3924 

3925 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

3926 """ 

3927 ), 

3928 ] = None, 

3929 deprecated: Annotated[ 

3930 Optional[bool], 

3931 Doc( 

3932 """ 

3933 Mark this *path operation* as deprecated. 

3934 

3935 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

3936 """ 

3937 ), 

3938 ] = None, 

3939 operation_id: Annotated[ 

3940 Optional[str], 

3941 Doc( 

3942 """ 

3943 Custom operation ID to be used by this *path operation*. 

3944 

3945 By default, it is generated automatically. 

3946 

3947 If you provide a custom operation ID, you need to make sure it is 

3948 unique for the whole API. 

3949 

3950 You can customize the 

3951 operation ID generation with the parameter 

3952 `generate_unique_id_function` in the `FastAPI` class. 

3953 

3954 Read more about it in the 

3955 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function). 

3956 """ 

3957 ), 

3958 ] = None, 

3959 response_model_include: Annotated[ 

3960 Optional[IncEx], 

3961 Doc( 

3962 """ 

3963 Configuration passed to Pydantic to include only certain fields in the 

3964 response data. 

3965 

3966 Read more about it in the 

3967 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude). 

3968 """ 

3969 ), 

3970 ] = None, 

3971 response_model_exclude: Annotated[ 

3972 Optional[IncEx], 

3973 Doc( 

3974 """ 

3975 Configuration passed to Pydantic to exclude certain fields in the 

3976 response data. 

3977 

3978 Read more about it in the 

3979 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude). 

3980 """ 

3981 ), 

3982 ] = None, 

3983 response_model_by_alias: Annotated[ 

3984 bool, 

3985 Doc( 

3986 """ 

3987 Configuration passed to Pydantic to define if the response model 

3988 should be serialized by alias when an alias is used. 

3989 

3990 Read more about it in the 

3991 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude). 

3992 """ 

3993 ), 

3994 ] = True, 

3995 response_model_exclude_unset: Annotated[ 

3996 bool, 

3997 Doc( 

3998 """ 

3999 Configuration passed to Pydantic to define if the response data 

4000 should have all the fields, including the ones that were not set and 

4001 have their default values. This is different from 

4002 `response_model_exclude_defaults` in that if the fields are set, 

4003 they will be included in the response, even if the value is the same 

4004 as the default. 

4005 

4006 When `True`, default values are omitted from the response. 

4007 

4008 Read more about it in the 

4009 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter). 

4010 """ 

4011 ), 

4012 ] = False, 

4013 response_model_exclude_defaults: Annotated[ 

4014 bool, 

4015 Doc( 

4016 """ 

4017 Configuration passed to Pydantic to define if the response data 

4018 should have all the fields, including the ones that have the same value 

4019 as the default. This is different from `response_model_exclude_unset` 

4020 in that if the fields are set but contain the same default values, 

4021 they will be excluded from the response. 

4022 

4023 When `True`, default values are omitted from the response. 

4024 

4025 Read more about it in the 

4026 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter). 

4027 """ 

4028 ), 

4029 ] = False, 

4030 response_model_exclude_none: Annotated[ 

4031 bool, 

4032 Doc( 

4033 """ 

4034 Configuration passed to Pydantic to define if the response data should 

4035 exclude fields set to `None`. 

4036 

4037 This is much simpler (less smart) than `response_model_exclude_unset` 

4038 and `response_model_exclude_defaults`. You probably want to use one of 

4039 those two instead of this one, as those allow returning `None` values 

4040 when it makes sense. 

4041 

4042 Read more about it in the 

4043 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_exclude_none). 

4044 """ 

4045 ), 

4046 ] = False, 

4047 include_in_schema: Annotated[ 

4048 bool, 

4049 Doc( 

4050 """ 

4051 Include this *path operation* in the generated OpenAPI schema. 

4052 

4053 This affects the generated OpenAPI (e.g. visible at `/docs`). 

4054 

4055 Read more about it in the 

4056 [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi). 

4057 """ 

4058 ), 

4059 ] = True, 

4060 response_class: Annotated[ 

4061 Type[Response], 

4062 Doc( 

4063 """ 

4064 Response class to be used for this *path operation*. 

4065 

4066 This will not be used if you return a response directly. 

4067 

4068 Read more about it in the 

4069 [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#redirectresponse). 

4070 """ 

4071 ), 

4072 ] = Default(JSONResponse), 

4073 name: Annotated[ 

4074 Optional[str], 

4075 Doc( 

4076 """ 

4077 Name for this *path operation*. Only used internally. 

4078 """ 

4079 ), 

4080 ] = None, 

4081 callbacks: Annotated[ 

4082 Optional[List[BaseRoute]], 

4083 Doc( 

4084 """ 

4085 List of *path operations* that will be used as OpenAPI callbacks. 

4086 

4087 This is only for OpenAPI documentation, the callbacks won't be used 

4088 directly. 

4089 

4090 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

4091 

4092 Read more about it in the 

4093 [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/). 

4094 """ 

4095 ), 

4096 ] = None, 

4097 openapi_extra: Annotated[ 

4098 Optional[Dict[str, Any]], 

4099 Doc( 

4100 """ 

4101 Extra metadata to be included in the OpenAPI schema for this *path 

4102 operation*. 

4103 

4104 Read more about it in the 

4105 [FastAPI docs for Path Operation Advanced Configuration](https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#custom-openapi-path-operation-schema). 

4106 """ 

4107 ), 

4108 ] = None, 

4109 generate_unique_id_function: Annotated[ 

4110 Callable[[routing.APIRoute], str], 

4111 Doc( 

4112 """ 

4113 Customize the function used to generate unique IDs for the *path 

4114 operations* shown in the generated OpenAPI. 

4115 

4116 This is particularly useful when automatically generating clients or 

4117 SDKs for your API. 

4118 

4119 Read more about it in the 

4120 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function). 

4121 """ 

4122 ), 

4123 ] = Default(generate_unique_id), 

4124 ) -> Callable[[DecoratedCallable], DecoratedCallable]: 

4125 """ 

4126 Add a *path operation* using an HTTP PATCH operation. 

4127 

4128 ## Example 

4129 

4130 ```python 

4131 from fastapi import FastAPI 

4132 from pydantic import BaseModel 

4133 

4134 class Item(BaseModel): 

4135 name: str 

4136 description: str | None = None 

4137 

4138 app = FastAPI() 

4139 

4140 @app.patch("/items/") 

4141 def update_item(item: Item): 

4142 return {"message": "Item updated in place"} 

4143 ``` 

4144 """ 

4145 return self.router.patch( 1abcdefg

4146 path, 

4147 response_model=response_model, 

4148 status_code=status_code, 

4149 tags=tags, 

4150 dependencies=dependencies, 

4151 summary=summary, 

4152 description=description, 

4153 response_description=response_description, 

4154 responses=responses, 

4155 deprecated=deprecated, 

4156 operation_id=operation_id, 

4157 response_model_include=response_model_include, 

4158 response_model_exclude=response_model_exclude, 

4159 response_model_by_alias=response_model_by_alias, 

4160 response_model_exclude_unset=response_model_exclude_unset, 

4161 response_model_exclude_defaults=response_model_exclude_defaults, 

4162 response_model_exclude_none=response_model_exclude_none, 

4163 include_in_schema=include_in_schema, 

4164 response_class=response_class, 

4165 name=name, 

4166 callbacks=callbacks, 

4167 openapi_extra=openapi_extra, 

4168 generate_unique_id_function=generate_unique_id_function, 

4169 ) 

4170 

4171 def trace( 2a b c d e f g ^U

4172 self, 

4173 path: Annotated[ 

4174 str, 

4175 Doc( 

4176 """ 

4177 The URL path to be used for this *path operation*. 

4178 

4179 For example, in `http://example.com/items`, the path is `/items`. 

4180 """ 

4181 ), 

4182 ], 

4183 *, 

4184 response_model: Annotated[ 

4185 Any, 

4186 Doc( 

4187 """ 

4188 The type to use for the response. 

4189 

4190 It could be any valid Pydantic *field* type. So, it doesn't have to 

4191 be a Pydantic model, it could be other things, like a `list`, `dict`, 

4192 etc. 

4193 

4194 It will be used for: 

4195 

4196 * Documentation: the generated OpenAPI (and the UI at `/docs`) will 

4197 show it as the response (JSON Schema). 

4198 * Serialization: you could return an arbitrary object and the 

4199 `response_model` would be used to serialize that object into the 

4200 corresponding JSON. 

4201 * Filtering: the JSON sent to the client will only contain the data 

4202 (fields) defined in the `response_model`. If you returned an object 

4203 that contains an attribute `password` but the `response_model` does 

4204 not include that field, the JSON sent to the client would not have 

4205 that `password`. 

4206 * Validation: whatever you return will be serialized with the 

4207 `response_model`, converting any data as necessary to generate the 

4208 corresponding JSON. But if the data in the object returned is not 

4209 valid, that would mean a violation of the contract with the client, 

4210 so it's an error from the API developer. So, FastAPI will raise an 

4211 error and return a 500 error code (Internal Server Error). 

4212 

4213 Read more about it in the 

4214 [FastAPI docs for Response Model](https://fastapi.tiangolo.com/tutorial/response-model/). 

4215 """ 

4216 ), 

4217 ] = Default(None), 

4218 status_code: Annotated[ 

4219 Optional[int], 

4220 Doc( 

4221 """ 

4222 The default status code to be used for the response. 

4223 

4224 You could override the status code by returning a response directly. 

4225 

4226 Read more about it in the 

4227 [FastAPI docs for Response Status Code](https://fastapi.tiangolo.com/tutorial/response-status-code/). 

4228 """ 

4229 ), 

4230 ] = None, 

4231 tags: Annotated[ 

4232 Optional[List[Union[str, Enum]]], 

4233 Doc( 

4234 """ 

4235 A list of tags to be applied to the *path operation*. 

4236 

4237 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

4238 

4239 Read more about it in the 

4240 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/#tags). 

4241 """ 

4242 ), 

4243 ] = None, 

4244 dependencies: Annotated[ 

4245 Optional[Sequence[Depends]], 

4246 Doc( 

4247 """ 

4248 A list of dependencies (using `Depends()`) to be applied to the 

4249 *path operation*. 

4250 

4251 Read more about it in the 

4252 [FastAPI docs for Dependencies in path operation decorators](https://fastapi.tiangolo.com/tutorial/dependencies/dependencies-in-path-operation-decorators/). 

4253 """ 

4254 ), 

4255 ] = None, 

4256 summary: Annotated[ 

4257 Optional[str], 

4258 Doc( 

4259 """ 

4260 A summary for the *path operation*. 

4261 

4262 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

4263 

4264 Read more about it in the 

4265 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/). 

4266 """ 

4267 ), 

4268 ] = None, 

4269 description: Annotated[ 

4270 Optional[str], 

4271 Doc( 

4272 """ 

4273 A description for the *path operation*. 

4274 

4275 If not provided, it will be extracted automatically from the docstring 

4276 of the *path operation function*. 

4277 

4278 It can contain Markdown. 

4279 

4280 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

4281 

4282 Read more about it in the 

4283 [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/). 

4284 """ 

4285 ), 

4286 ] = None, 

4287 response_description: Annotated[ 

4288 str, 

4289 Doc( 

4290 """ 

4291 The description for the default response. 

4292 

4293 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

4294 """ 

4295 ), 

4296 ] = "Successful Response", 

4297 responses: Annotated[ 

4298 Optional[Dict[Union[int, str], Dict[str, Any]]], 

4299 Doc( 

4300 """ 

4301 Additional responses that could be returned by this *path operation*. 

4302 

4303 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

4304 """ 

4305 ), 

4306 ] = None, 

4307 deprecated: Annotated[ 

4308 Optional[bool], 

4309 Doc( 

4310 """ 

4311 Mark this *path operation* as deprecated. 

4312 

4313 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

4314 """ 

4315 ), 

4316 ] = None, 

4317 operation_id: Annotated[ 

4318 Optional[str], 

4319 Doc( 

4320 """ 

4321 Custom operation ID to be used by this *path operation*. 

4322 

4323 By default, it is generated automatically. 

4324 

4325 If you provide a custom operation ID, you need to make sure it is 

4326 unique for the whole API. 

4327 

4328 You can customize the 

4329 operation ID generation with the parameter 

4330 `generate_unique_id_function` in the `FastAPI` class. 

4331 

4332 Read more about it in the 

4333 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function). 

4334 """ 

4335 ), 

4336 ] = None, 

4337 response_model_include: Annotated[ 

4338 Optional[IncEx], 

4339 Doc( 

4340 """ 

4341 Configuration passed to Pydantic to include only certain fields in the 

4342 response data. 

4343 

4344 Read more about it in the 

4345 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude). 

4346 """ 

4347 ), 

4348 ] = None, 

4349 response_model_exclude: Annotated[ 

4350 Optional[IncEx], 

4351 Doc( 

4352 """ 

4353 Configuration passed to Pydantic to exclude certain fields in the 

4354 response data. 

4355 

4356 Read more about it in the 

4357 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude). 

4358 """ 

4359 ), 

4360 ] = None, 

4361 response_model_by_alias: Annotated[ 

4362 bool, 

4363 Doc( 

4364 """ 

4365 Configuration passed to Pydantic to define if the response model 

4366 should be serialized by alias when an alias is used. 

4367 

4368 Read more about it in the 

4369 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_include-and-response_model_exclude). 

4370 """ 

4371 ), 

4372 ] = True, 

4373 response_model_exclude_unset: Annotated[ 

4374 bool, 

4375 Doc( 

4376 """ 

4377 Configuration passed to Pydantic to define if the response data 

4378 should have all the fields, including the ones that were not set and 

4379 have their default values. This is different from 

4380 `response_model_exclude_defaults` in that if the fields are set, 

4381 they will be included in the response, even if the value is the same 

4382 as the default. 

4383 

4384 When `True`, default values are omitted from the response. 

4385 

4386 Read more about it in the 

4387 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter). 

4388 """ 

4389 ), 

4390 ] = False, 

4391 response_model_exclude_defaults: Annotated[ 

4392 bool, 

4393 Doc( 

4394 """ 

4395 Configuration passed to Pydantic to define if the response data 

4396 should have all the fields, including the ones that have the same value 

4397 as the default. This is different from `response_model_exclude_unset` 

4398 in that if the fields are set but contain the same default values, 

4399 they will be excluded from the response. 

4400 

4401 When `True`, default values are omitted from the response. 

4402 

4403 Read more about it in the 

4404 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#use-the-response_model_exclude_unset-parameter). 

4405 """ 

4406 ), 

4407 ] = False, 

4408 response_model_exclude_none: Annotated[ 

4409 bool, 

4410 Doc( 

4411 """ 

4412 Configuration passed to Pydantic to define if the response data should 

4413 exclude fields set to `None`. 

4414 

4415 This is much simpler (less smart) than `response_model_exclude_unset` 

4416 and `response_model_exclude_defaults`. You probably want to use one of 

4417 those two instead of this one, as those allow returning `None` values 

4418 when it makes sense. 

4419 

4420 Read more about it in the 

4421 [FastAPI docs for Response Model - Return Type](https://fastapi.tiangolo.com/tutorial/response-model/#response_model_exclude_none). 

4422 """ 

4423 ), 

4424 ] = False, 

4425 include_in_schema: Annotated[ 

4426 bool, 

4427 Doc( 

4428 """ 

4429 Include this *path operation* in the generated OpenAPI schema. 

4430 

4431 This affects the generated OpenAPI (e.g. visible at `/docs`). 

4432 

4433 Read more about it in the 

4434 [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi). 

4435 """ 

4436 ), 

4437 ] = True, 

4438 response_class: Annotated[ 

4439 Type[Response], 

4440 Doc( 

4441 """ 

4442 Response class to be used for this *path operation*. 

4443 

4444 This will not be used if you return a response directly. 

4445 

4446 Read more about it in the 

4447 [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#redirectresponse). 

4448 """ 

4449 ), 

4450 ] = Default(JSONResponse), 

4451 name: Annotated[ 

4452 Optional[str], 

4453 Doc( 

4454 """ 

4455 Name for this *path operation*. Only used internally. 

4456 """ 

4457 ), 

4458 ] = None, 

4459 callbacks: Annotated[ 

4460 Optional[List[BaseRoute]], 

4461 Doc( 

4462 """ 

4463 List of *path operations* that will be used as OpenAPI callbacks. 

4464 

4465 This is only for OpenAPI documentation, the callbacks won't be used 

4466 directly. 

4467 

4468 It will be added to the generated OpenAPI (e.g. visible at `/docs`). 

4469 

4470 Read more about it in the 

4471 [FastAPI docs for OpenAPI Callbacks](https://fastapi.tiangolo.com/advanced/openapi-callbacks/). 

4472 """ 

4473 ), 

4474 ] = None, 

4475 openapi_extra: Annotated[ 

4476 Optional[Dict[str, Any]], 

4477 Doc( 

4478 """ 

4479 Extra metadata to be included in the OpenAPI schema for this *path 

4480 operation*. 

4481 

4482 Read more about it in the 

4483 [FastAPI docs for Path Operation Advanced Configuration](https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#custom-openapi-path-operation-schema). 

4484 """ 

4485 ), 

4486 ] = None, 

4487 generate_unique_id_function: Annotated[ 

4488 Callable[[routing.APIRoute], str], 

4489 Doc( 

4490 """ 

4491 Customize the function used to generate unique IDs for the *path 

4492 operations* shown in the generated OpenAPI. 

4493 

4494 This is particularly useful when automatically generating clients or 

4495 SDKs for your API. 

4496 

4497 Read more about it in the 

4498 [FastAPI docs about how to Generate Clients](https://fastapi.tiangolo.com/advanced/generate-clients/#custom-generate-unique-id-function). 

4499 """ 

4500 ), 

4501 ] = Default(generate_unique_id), 

4502 ) -> Callable[[DecoratedCallable], DecoratedCallable]: 

4503 """ 

4504 Add a *path operation* using an HTTP TRACE operation. 

4505 

4506 ## Example 

4507 

4508 ```python 

4509 from fastapi import FastAPI 

4510 

4511 app = FastAPI() 

4512 

4513 @app.trace("/items/{item_id}") 

4514 def trace_item(item_id: str): 

4515 return None 

4516 ``` 

4517 """ 

4518 return self.router.trace( 1abcdefg

4519 path, 

4520 response_model=response_model, 

4521 status_code=status_code, 

4522 tags=tags, 

4523 dependencies=dependencies, 

4524 summary=summary, 

4525 description=description, 

4526 response_description=response_description, 

4527 responses=responses, 

4528 deprecated=deprecated, 

4529 operation_id=operation_id, 

4530 response_model_include=response_model_include, 

4531 response_model_exclude=response_model_exclude, 

4532 response_model_by_alias=response_model_by_alias, 

4533 response_model_exclude_unset=response_model_exclude_unset, 

4534 response_model_exclude_defaults=response_model_exclude_defaults, 

4535 response_model_exclude_none=response_model_exclude_none, 

4536 include_in_schema=include_in_schema, 

4537 response_class=response_class, 

4538 name=name, 

4539 callbacks=callbacks, 

4540 openapi_extra=openapi_extra, 

4541 generate_unique_id_function=generate_unique_id_function, 

4542 ) 

4543 

4544 def websocket_route( 1abcdefg

4545 self, path: str, name: Union[str, None] = None 

4546 ) -> Callable[[DecoratedCallable], DecoratedCallable]: 

4547 def decorator(func: DecoratedCallable) -> DecoratedCallable: 1abcdefg

4548 self.router.add_websocket_route(path, func, name=name) 1abcdefg

4549 return func 1abcdefg

4550 

4551 return decorator 1abcdefg

4552 

4553 @deprecated( 1abcdefg

4554 """ 

4555 on_event is deprecated, use lifespan event handlers instead. 

4556 

4557 Read more about it in the 

4558 [FastAPI docs for Lifespan Events](https://fastapi.tiangolo.com/advanced/events/). 

4559 """ 

4560 ) 

4561 def on_event( 1abcdefg

4562 self, 

4563 event_type: Annotated[ 

4564 str, 

4565 Doc( 

4566 """ 

4567 The type of event. `startup` or `shutdown`. 

4568 """ 

4569 ), 

4570 ], 

4571 ) -> Callable[[DecoratedCallable], DecoratedCallable]: 

4572 """ 

4573 Add an event handler for the application. 

4574 

4575 `on_event` is deprecated, use `lifespan` event handlers instead. 

4576 

4577 Read more about it in the 

4578 [FastAPI docs for Lifespan Events](https://fastapi.tiangolo.com/advanced/events/#alternative-events-deprecated). 

4579 """ 

4580 return self.router.on_event(event_type) 2a tbGbb ubNbc vbUbd wb1be xb8bf yb(bg zb/b

4581 

4582 def middleware( 1abcdefg

4583 self, 

4584 middleware_type: Annotated[ 

4585 str, 

4586 Doc( 

4587 """ 

4588 The type of middleware. Currently only supports `http`. 

4589 """ 

4590 ), 

4591 ], 

4592 ) -> Callable[[DecoratedCallable], DecoratedCallable]: 

4593 """ 

4594 Add a middleware to the application. 

4595 

4596 Read more about it in the 

4597 [FastAPI docs for Middleware](https://fastapi.tiangolo.com/tutorial/middleware/). 

4598 

4599 ## Example 

4600 

4601 ```python 

4602 import time 

4603 from typing import Awaitable, Callable 

4604 

4605 from fastapi import FastAPI, Request, Response 

4606 

4607 app = FastAPI() 

4608 

4609 

4610 @app.middleware("http") 

4611 async def add_process_time_header( 

4612 request: Request, call_next: Callable[[Request], Awaitable[Response]] 

4613 ) -> Response: 

4614 start_time = time.time() 

4615 response = await call_next(request) 

4616 process_time = time.time() - start_time 

4617 response.headers["X-Process-Time"] = str(process_time) 

4618 return response 

4619 ``` 

4620 """ 

4621 

4622 def decorator(func: DecoratedCallable) -> DecoratedCallable: 1abcdefg

4623 self.add_middleware(BaseHTTPMiddleware, dispatch=func) 1abcdefg

4624 return func 1abcdefg

4625 

4626 return decorator 1abcdefg

4627 

4628 def exception_handler( 1abcdefg

4629 self, 

4630 exc_class_or_status_code: Annotated[ 

4631 Union[int, Type[Exception]], 

4632 Doc( 

4633 """ 

4634 The Exception class this would handle, or a status code. 

4635 """ 

4636 ), 

4637 ], 

4638 ) -> Callable[[DecoratedCallable], DecoratedCallable]: 

4639 """ 

4640 Add an exception handler to the app. 

4641 

4642 Read more about it in the 

4643 [FastAPI docs for Handling Errors](https://fastapi.tiangolo.com/tutorial/handling-errors/). 

4644 

4645 ## Example 

4646 

4647 ```python 

4648 from fastapi import FastAPI, Request 

4649 from fastapi.responses import JSONResponse 

4650 

4651 

4652 class UnicornException(Exception): 

4653 def __init__(self, name: str): 

4654 self.name = name 

4655 

4656 

4657 app = FastAPI() 

4658 

4659 

4660 @app.exception_handler(UnicornException) 

4661 async def unicorn_exception_handler(request: Request, exc: UnicornException): 

4662 return JSONResponse( 

4663 status_code=418, 

4664 content={"message": f"Oops! {exc.name} did something. There goes a rainbow..."}, 

4665 ) 

4666 ``` 

4667 """ 

4668 

4669 def decorator(func: DecoratedCallable) -> DecoratedCallable: 1abcdefg

4670 self.add_exception_handler(exc_class_or_status_code, func) 1abcdefg

4671 return func 1abcdefg

4672 

4673 return decorator 1abcdefg